diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5116050..4142249 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,7 +7,8 @@ on: workflow_dispatch: env: REGISTRY: docker.frappet.com - IMAGE_NAME: ehr/bma-ehr-node-service + # IMAGE_NAME: ehr/bma-ehr-node-service + IMAGE_NAME: ehr/bma-ehr-probation DEPLOY_HOST: frappet.com # COMPOSE_PATH: /home/frappet/docker/bma-ehr COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-probation diff --git a/Dockerfile b/Dockerfile index 4ca0f48..0b580b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /app # Install app dependencies COPY package*.json ./ -RUN npm ci +RUN npm i COPY . . @@ -24,7 +24,7 @@ WORKDIR /app COPY package*.json ./ # COPY .env ./ -RUN npm ci --production +RUN npm i --production COPY --from=builder /app/dist ./dist diff --git a/README.md b/README.md index 2d78d17..9c611de 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,29 @@ Envelopment - Express - Mysql -Run Project +Install packages ``` -> npm install -> npm run dev +npm install +``` + +Run project + +``` +npm run dev ``` Migration -1. สร้าง entities +1. สร้าง/แก้ไข entities 2. สร้างไฟล์ migration จาก entities และรัน update เข้า database - > npm run migration:generate src/migration/xxx (xxx คือชื่อไฟล์ migrate) - > npm run migration:run + +``` +npm run migration:generate src/migration/xxx (xxx คือชื่อไฟล์ migrate) +``` + +3. Run migration + +``` +npm run migration:run +``` diff --git a/src/app.ts b/src/app.ts index 326a5a2..12180ca 100644 --- a/src/app.ts +++ b/src/app.ts @@ -4,11 +4,10 @@ import cors from "cors"; import express from "express"; import swaggerUi from "swagger-ui-express"; import swaggerDocument from "./swagger.json"; -import * as cron from "node-cron"; import error from "./middlewares/error"; import { AppDataSource } from "./database/data-source"; import { RegisterRoutes } from "./routes"; -// import logMiddleware from "./middlewares/logs"; +import logMiddleware from "./middlewares/logs"; async function main() { await AppDataSource.initialize(); @@ -18,11 +17,11 @@ async function main() { app.use( cors({ origin: "*", - }) + }), ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); - // app.use(logMiddleware); + app.use(logMiddleware); app.use("/", express.static("static")); app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument)); @@ -36,11 +35,9 @@ async function main() { APP_PORT, APP_HOST, () => ( - console.log( - `[APP] Application is running on: http://localhost:${APP_PORT}` - ), + console.log(`[APP] Application is running on: http://localhost:${APP_PORT}`), console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`) - ) + ), ); } diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index ed6d539..fe86297 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -21,21 +21,12 @@ import { findEndDate, setLogDataDiff } from "../interfaces/utils"; import { Personal } from "../entities/Personal"; import permission from "../interfaces/permission"; import { Assign, CreateAssign } from "../entities/Assign"; -import { - AssignDirector, - CreateAssignDirector, -} from "../entities/AssignDirector"; +import { AssignDirector, CreateAssignDirector } from "../entities/AssignDirector"; import { AssignJob, CreateAssignJob } from "../entities/AssignJob"; -import { - AssignKnowledge, - CreateAssignKnowledge, -} from "../entities/AssignKnowledge"; +import { AssignKnowledge, CreateAssignKnowledge } from "../entities/AssignKnowledge"; import { AssignLaw, CreateAssignLaw } from "../entities/AssignLaw"; import { AssignSkill, CreateAssignSkill } from "../entities/AssignSkill"; -import { - AssignCompetency, - CreateAssignCompetency, -} from "../entities/AssignCompetency"; +import { AssignCompetency, CreateAssignCompetency } from "../entities/AssignCompetency"; import { AssignCompetencyGroup, CreateAssignCompetencyGroup, @@ -44,29 +35,24 @@ import { AssignOutput, CreateAssignOutput } from "../entities/AssignOutput"; import { Law } from "../entities/Law"; import CallAPI from "../interfaces/call-api"; -@Route("api/v1/assign") +@Route("api/v1/probation/assign") @Tags("ฟอร์มมอบหมายงาน") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class AssignController extends Controller { private assignRepository = AppDataSource.getRepository(Assign); private personalRepository = AppDataSource.getRepository(Personal); - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); private assignJobRepository = AppDataSource.getRepository(AssignJob); - private assignKnowledgeRepository = - AppDataSource.getRepository(AssignKnowledge); + private assignKnowledgeRepository = AppDataSource.getRepository(AssignKnowledge); private assignLawRepository = AppDataSource.getRepository(AssignLaw); private assignSkillRepository = AppDataSource.getRepository(AssignSkill); - private assignCompetencyRepository = - AppDataSource.getRepository(AssignCompetency); - private assignCompetencyGroupRepository = AppDataSource.getRepository( - AssignCompetencyGroup - ); + private assignCompetencyRepository = AppDataSource.getRepository(AssignCompetency); + private assignCompetencyGroupRepository = AppDataSource.getRepository(AssignCompetencyGroup); private assignOutputRepository = AppDataSource.getRepository(AssignOutput); private lawsRepository = AppDataSource.getRepository(Law); @@ -77,32 +63,29 @@ export class AssignController extends Controller { * */ @Post("") - async AddAssign( - @Request() request: RequestWithUser, - @Body() requestBody: CreateAssign - ) { + async AddAssign(@Request() request: RequestWithUser, @Body() requestBody: CreateAssign) { await new permission().PermissionUpdate(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ where: { - personal_id: requestBody.personal_id, + personal_id: requestBody.personalId, }, }); if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const roundNo = await this.assignRepository.count({ where: { active: 1, - personal_id: requestBody.personal_id, + personal_id: requestBody.personalId, }, }); const data: any = { ...requestBody, round_no: roundNo + 1, - personal_id: requestBody.personal_id, + personal_id: requestBody.personalId, createdUserId: request.user.sub, createdFullName: request.user.name, updateUserId: request.user.sub, @@ -112,17 +95,15 @@ export class AssignController extends Controller { const assign = await this.assignRepository.save(data, { data: request }); setLogDataDiff(request, { before, after: data }); - const jobs = await requestBody.assign_jobs.map( - (x: CreateAssignJob, index: number) => ({ - ...x, - id: index + 1, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const jobs = await requestBody.assign_jobs.map((x: CreateAssignJob, index: number) => ({ + ...x, + id: index + 1, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignJobRepository.save(jobs, { data: request }); setLogDataDiff(request, { before, after: jobs }); @@ -135,36 +116,32 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignKnowledgeRepository.save(knowledges, { data: request }); setLogDataDiff(request, { before, after: knowledges }); - const laws = await requestBody.assign_law.map( - (x: CreateAssignLaw, index: number) => ({ - ordering: index + 1, - law_id: x.id, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const laws = await requestBody.assign_law.map((x: CreateAssignLaw, index: number) => ({ + ordering: index + 1, + law_id: x.id, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignLawRepository.save(laws, { data: request }); setLogDataDiff(request, { before, after: laws }); - const skills = await requestBody.assign_skill.map( - (x: CreateAssignSkill, index: number) => ({ - skill_id: index + 1, - skill_level: x.level, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const skills = await requestBody.assign_skill.map((x: CreateAssignSkill, index: number) => ({ + skill_id: index + 1, + skill_level: x.level, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignSkillRepository.save(skills, { data: request }); setLogDataDiff(request, { before, after: skills }); @@ -179,7 +156,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyRepository.save(competencise, { data: request }); setLogDataDiff(request, { before, after: competencise }); @@ -195,7 +172,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyGroupRepository.save(competencyGroups, { data: request, @@ -211,7 +188,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignOutputRepository.save(outputs, { data: request }); setLogDataDiff(request, { before, after: outputs }); @@ -226,7 +203,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignDirectorRepository.save(directors, { data: request }); setLogDataDiff(request, { before, after: directors }); @@ -244,7 +221,7 @@ export class AssignController extends Controller { async EditAssign( @Query() assign_id: string, @Request() request: RequestWithUser, - @Body() requestBody: CreateAssign + @Body() requestBody: CreateAssign, ) { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -254,20 +231,17 @@ export class AssignController extends Controller { let before = assign; if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const person = await this.personalRepository.findOne({ where: { - personal_id: requestBody.personal_id, + personal_id: requestBody.personalId, }, }); if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const data: any = { @@ -278,17 +252,15 @@ export class AssignController extends Controller { }; await this.assignJobRepository.delete({ assign_id }); - const jobs = await requestBody.assign_jobs.map( - (x: CreateAssignJob, index: number) => ({ - ...x, - id: index + 1, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const jobs = await requestBody.assign_jobs.map((x: CreateAssignJob, index: number) => ({ + ...x, + id: index + 1, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignJobRepository.save(jobs); await this.assignKnowledgeRepository.delete({ assign_id }); @@ -301,36 +273,32 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignKnowledgeRepository.save(knowledges); await this.assignLawRepository.delete({ assign_id }); - const laws = await requestBody.assign_law.map( - (x: CreateAssignLaw, index: number) => ({ - ordering: index + 1, - law_id: x.id, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const laws = await requestBody.assign_law.map((x: CreateAssignLaw, index: number) => ({ + ordering: index + 1, + law_id: x.id, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignLawRepository.save(laws); await this.assignSkillRepository.delete({ assign_id }); - const skills = await requestBody.assign_skill.map( - (x: CreateAssignSkill, index: number) => ({ - skill_id: index + 1, - skill_level: x.level, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); + const skills = await requestBody.assign_skill.map((x: CreateAssignSkill, index: number) => ({ + skill_id: index + 1, + skill_level: x.level, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); await this.assignSkillRepository.save(skills); await this.assignCompetencyRepository.delete({ assign_id }); @@ -345,7 +313,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyRepository.save(competencise); @@ -361,7 +329,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyGroupRepository.save(competencyGroups); @@ -375,7 +343,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignOutputRepository.save(outputs); @@ -390,7 +358,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignDirectorRepository.save(directors); @@ -469,10 +437,7 @@ export class AssignController extends Controller { * */ @Get("assign-list") - async ListPersonal( - @Request() request: RequestWithUser, - @Query() personal_id: string - ) { + async ListPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { await new permission().PermissionGet(request, "SYS_PROBATION"); const lists = await this.assignRepository.find({ select: ["id", "round_no", "date_start", "date_finish"], @@ -486,6 +451,7 @@ export class AssignController extends Controller { lists.map(async (item) => { const director = await this.assignDirectorRepository.find({ where: { assign_id: item.id }, + order: { ordering: "ASC" }, }); let mentors = ""; @@ -500,14 +466,10 @@ export class AssignController extends Controller { } } - const commanderData = await (director.find( - (x) => x.role == "commander" - ) ?? null); + const commanderData = await (director.find((x) => x.role == "commander") ?? null); const commander = commanderData ? commanderData.fullname : null; - const chairmanData = await (director.find( - (x) => x.role == "chairman" - ) ?? null); + const chairmanData = await (director.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData ? chairmanData.fullname : null; await result.push({ @@ -516,7 +478,7 @@ export class AssignController extends Controller { commander: commander, chairman: chairman, }); - }) + }), ); return new HttpSuccess(result); @@ -529,11 +491,8 @@ export class AssignController extends Controller { * */ @Get("") - async GetAssign( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + async GetAssign(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); const assign = await this.assignRepository.findOne({ select: [ @@ -542,6 +501,7 @@ export class AssignController extends Controller { "round_no", "date_start", "date_finish", + "other_desc", "other4_desc", "other5_no1_desc", "experimenter_dated", @@ -553,10 +513,7 @@ export class AssignController extends Controller { }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -577,7 +534,7 @@ export class AssignController extends Controller { }); if (!profileData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const profile = { @@ -620,12 +577,21 @@ export class AssignController extends Controller { where: { active: 1 }, }); - const laws = await lawData.map((x) => ({ - id: x.id, - selected: x.assignLaw ? 1 : 0, - description: x.description, - status_select: x.status_select, - })); + const laws = await Promise.all( + lawData.map(async (x) => { + const assignLaw = await this.assignLawRepository.countBy({ + assign_id: assign_id, + law_id: x.id, + }); + + return { + id: x.id, + selected: assignLaw > 0 ? 1 : 0, + description: x.description, + status_select: x.status_select, + }; + }), + ); const skillsData = await this.assignSkillRepository.find({ relations: ["skill"], @@ -651,12 +617,7 @@ export class AssignController extends Controller { })); const competencyData = await this.assignCompetencyRepository.find({ - select: [ - "competency_id", - "competency_level", - "competency_name", - "competency_description", - ], + select: ["competency_id", "competency_level", "competency_name", "competency_description"], where: { assign_id }, }); @@ -667,17 +628,15 @@ export class AssignController extends Controller { description: x.competency_description, })); - const competencyGroupData = await this.assignCompetencyGroupRepository.find( - { - select: [ - "competency_group_id", - "competency_group_level", - "competency_group_name", - "competency_group_description", - ], - where: { assign_id }, - } - ); + const competencyGroupData = await this.assignCompetencyGroupRepository.find({ + select: [ + "competency_group_id", + "competency_group_level", + "competency_group_name", + "competency_group_description", + ], + where: { assign_id }, + }); const competency_groups = await competencyGroupData.map((x) => ({ id: x.competency_group_id, level: x.competency_group_level, @@ -692,6 +651,7 @@ export class AssignController extends Controller { const director = await this.assignDirectorRepository.find({ where: { assign_id }, + order: { ordering: "ASC" }, }); let mentors = []; @@ -703,16 +663,13 @@ export class AssignController extends Controller { ...e, name: e.fullname, label: - e.fullname + - " " + - (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), + e.fullname + " " + (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), Position: e.position, // report }); } } - const commanderData = await (director.find((x) => x.role == "commander") ?? - null); + const commanderData = await (director.find((x) => x.role == "commander") ?? null); const commander = await (commanderData ? { ...commanderData, @@ -727,8 +684,7 @@ export class AssignController extends Controller { } : null); - const chairmanData = await (director.find((x) => x.role == "chairman") ?? - null); + const chairmanData = await (director.find((x) => x.role == "chairman") ?? null); const chairman = await (chairmanData ? { ...chairmanData, diff --git a/src/controllers/CalculateController.ts b/src/controllers/CalculateController.ts index 281ed85..0ace989 100644 --- a/src/controllers/CalculateController.ts +++ b/src/controllers/CalculateController.ts @@ -15,12 +15,12 @@ import HttpStatusCode from "../interfaces/http-status"; import { RequestWithUser } from "../middlewares/user"; import { findEndDate } from "../interfaces/utils"; -@Route("api/v1/calculate") +@Route("api/v1/probation/calculate") @Tags("ฟอร์มมอบหมายงาน") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class CalculateController extends Controller { @@ -37,7 +37,7 @@ export class CalculateController extends Controller { month: number; start_date: Date; }, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { const { month, start_date } = requestBody; const finish_date = findEndDate(month, start_date); diff --git a/src/controllers/DataOptionsController.ts b/src/controllers/DataOptionsController.ts index ca801c9..994ed7d 100644 --- a/src/controllers/DataOptionsController.ts +++ b/src/controllers/DataOptionsController.ts @@ -3,7 +3,6 @@ import { Route, Security, Tags, - Path, Request, SuccessResponse, Response, @@ -21,20 +20,20 @@ import { MapKnowledgeSkill } from "../entities/MapKnowledgeSkill"; import { Personal } from "../entities/Personal"; import { Law } from "../entities/Law"; import { Assign } from "../entities/Assign"; +import permission from "../interfaces/permission"; -@Route("api/v1/data-options") +@Route("api/v1/probation/data-options") @Tags("Data Options") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class DataOptionController extends Controller { private personalRepository = AppDataSource.getRepository(Personal); private knowledgeRepository = AppDataSource.getRepository(Knowledge); - private mapKnowledgeSkillRepository = - AppDataSource.getRepository(MapKnowledgeSkill); + private mapKnowledgeSkillRepository = AppDataSource.getRepository(MapKnowledgeSkill); private skillRepository = AppDataSource.getRepository(Skill); private lawRepository = AppDataSource.getRepository(Law); private assignRepository = AppDataSource.getRepository(Assign); @@ -46,21 +45,16 @@ export class DataOptionController extends Controller { * */ @Get("knowledge") - async GetKnowledge( - @Query() personal_id: string, - @Request() request: RequestWithUser - ) { + async GetKnowledge(@Query() personal_id: string) { const person = await this.personalRepository.findOne({ where: { personal_id }, }); - console.log(person); - if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } - const result = await this.mapKnowledgeSkillRepository.findOne({ + let result = await this.mapKnowledgeSkillRepository.findOne({ where: { positionName: person.positionName, positionLevelName: person.positionLevelName, @@ -69,7 +63,17 @@ export class DataOptionController extends Controller { }); if (!result) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ + result = await this.mapKnowledgeSkillRepository.findOne({ + where: { + positionLevelName: person.positionLevelName, + active: 1, + }, + }); + } + + if (!result) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง"); } const knowledges = await this.knowledgeRepository.find({ @@ -102,19 +106,16 @@ export class DataOptionController extends Controller { * */ @Get("skill") - async GetSkill( - @Query() personal_id: string, - @Request() request: RequestWithUser - ) { + async GetSkill(@Query() personal_id: string) { const person = await this.personalRepository.findOne({ where: { personal_id }, }); if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const result = await this.mapKnowledgeSkillRepository.findOne({ + let result = await this.mapKnowledgeSkillRepository.findOne({ select: [ "skill_computer_level", "skill_english_level", @@ -129,90 +130,124 @@ export class DataOptionController extends Controller { }); if (!result) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ + result = await this.mapKnowledgeSkillRepository.findOne({ + select: [ + "skill_computer_level", + "skill_english_level", + "skill_information_level", + "skill_resourse_level", + ], + where: { + positionLevelName: person.positionLevelName, + active: 1, + }, + }); } - const skills = await this.skillRepository.find({ + if (!result) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง"); + } + + const computerData = await this.skillRepository.findOne({ where: { type: TypeSkill.COMPUTER, active: 1 }, }); - const skill = await skills.map((v) => ({ - id: v.id, - title: v.title, - level_description: - result.skill_english_level == 1 - ? v.level1 - : result.skill_english_level == 2 - ? v.level2 - : result.skill_english_level == 3 - ? v.level3 - : result.skill_english_level == 4 - ? v.level4 - : v.level5, - level: result.skill_english_level, - })); - const englishs = await this.skillRepository.find({ + if (!computerData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะคอมพิวเตอร์"); + } + const computer = await { + id: computerData.id, + title: computerData.title, + level_description: + result.skill_computer_level == 1 + ? computerData.level1 + : result.skill_computer_level == 2 + ? computerData.level2 + : result.skill_computer_level == 3 + ? computerData.level3 + : result.skill_computer_level == 4 + ? computerData.level4 + : computerData.level5, + level: result.skill_computer_level, + }; + + const englishData = await this.skillRepository.findOne({ where: { type: TypeSkill.ENG, active: 1 }, }); - const english = await englishs.map((v) => ({ - id: v.id, - title: v.title, + + if (!englishData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะภาษาอังกฤษ"); + } + + const english = await { + id: englishData.id, + title: englishData.title, level_description: result.skill_english_level == 1 - ? v.level1 + ? englishData.level1 : result.skill_english_level == 2 - ? v.level2 + ? englishData.level2 : result.skill_english_level == 3 - ? v.level3 + ? englishData.level3 : result.skill_english_level == 4 - ? v.level4 - : v.level5, + ? englishData.level4 + : englishData.level5, level: result.skill_english_level, - })); + }; - const informations = await this.skillRepository.find({ + const informationData = await this.skillRepository.findOne({ where: { type: TypeSkill.INFORMATION, active: 1 }, }); - const information = await informations.map((v) => ({ - id: v.id, - title: v.title, + + if (!informationData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const information = await { + id: informationData.id, + title: informationData.title, level_description: result.skill_information_level == 1 - ? v.level1 + ? informationData.level1 : result.skill_information_level == 2 - ? v.level2 + ? informationData.level2 : result.skill_information_level == 3 - ? v.level3 + ? informationData.level3 : result.skill_information_level == 4 - ? v.level4 - : v.level5, + ? informationData.level4 + : informationData.level5, level: result.skill_information_level, - })); + }; - const resourses = await this.skillRepository.find({ + const resourseData = await this.skillRepository.findOne({ where: { type: TypeSkill.RESOURSE, active: 1 }, }); - const resourse = await resourses.map((v) => ({ - id: v.id, - title: v.title, + if (!resourseData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const resourse = await { + id: resourseData.id, + title: resourseData.title, level_description: result.skill_resourse_level == 1 - ? v.level1 + ? resourseData.level1 : result.skill_resourse_level == 2 - ? v.level2 + ? resourseData.level2 : result.skill_resourse_level == 3 - ? v.level3 + ? resourseData.level3 : result.skill_resourse_level == 4 - ? v.level4 - : v.level5, + ? resourseData.level4 + : resourseData.level5, level: result.skill_resourse_level, - })); + }; return new HttpSuccess({ - computer: skill, - english: english, - information: information, - resourse: resourse, + computer, + english, + information, + resourse, }); } @@ -223,10 +258,7 @@ export class DataOptionController extends Controller { * */ @Get("law") - async GetLaw( - @Query() personal_id: string, - @Request() request: RequestWithUser - ) { + async GetLaw(@Query() personal_id: string) { const results = await this.lawRepository.find({ select: ["id", "parent_id", "description", "status_select"], where: { @@ -235,7 +267,7 @@ export class DataOptionController extends Controller { }); if (!results) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const result = await results.map((v) => ({ @@ -253,10 +285,9 @@ export class DataOptionController extends Controller { * */ @Get("new-assign") - async NewAssign( - @Query() personal_id: string, - @Request() request: RequestWithUser - ) { + async NewAssign(@Query() personal_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const person = await this.personalRepository.findOne({ select: [ "personal_id", @@ -277,7 +308,7 @@ export class DataOptionController extends Controller { }); if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const assign = await this.assignRepository.count({ @@ -291,12 +322,10 @@ export class DataOptionController extends Controller { ...person, }; - const data = await { + return new HttpSuccess({ person: responsePerson, assign_no: assign + 1, assign_month: 6, - }; - - return new HttpSuccess({ data: data }); + }); } } diff --git a/src/controllers/EvaluateChairmanController.ts b/src/controllers/EvaluateChairmanController.ts index 3ed3108..a104dc7 100644 --- a/src/controllers/EvaluateChairmanController.ts +++ b/src/controllers/EvaluateChairmanController.ts @@ -22,25 +22,20 @@ import HttpError from "../interfaces/http-error"; import { Assign } from "../entities/Assign"; import { Personal } from "../entities/Personal"; import CallAPI from "../interfaces/call-api"; -import { - CreateEvaluateChairman, - EvaluateChairman, -} from "../entities/EvaluateChairman"; - -@Route("api/v1/evaluate-chairman") +import { CreateEvaluateChairman, EvaluateChairman } from "../entities/EvaluateChairman"; +import permission from "../interfaces/permission"; +@Route("api/v1/probation/evaluate-chairman") @Tags("แบบประเมินผล (คณะกรรมการ)") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class EvaluateChairmanController extends Controller { - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); private assignRepository = AppDataSource.getRepository(Assign); - private evaluateChairmanRepository = - AppDataSource.getRepository(EvaluateChairman); + private evaluateChairmanRepository = AppDataSource.getRepository(EvaluateChairman); private personalRepository = AppDataSource.getRepository(Personal); /** @@ -50,10 +45,9 @@ export class EvaluateChairmanController extends Controller { * */ @Get("create") - async CreateEvaluate( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { + async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -62,7 +56,7 @@ export class EvaluateChairmanController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -71,10 +65,7 @@ export class EvaluateChairmanController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -82,10 +73,7 @@ export class EvaluateChairmanController extends Controller { ...assign.profile, id: assign.profile.personal_id, name: - assign.profile.prefixName + - assign.profile.firstName + - " " + - assign.profile.lastName, + assign.profile.prefixName + assign.profile.firstName + " " + assign.profile.lastName, Oc: assign.profile.organization, } : null); @@ -104,36 +92,70 @@ export class EvaluateChairmanController extends Controller { const directorData = await this.assignDirectorRepository.find({ where: { assign_id }, + order: { ordering: "ASC" }, }); if (!directorData) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } - let mentors = ""; + let mentors = []; const mentorList = await directorData.filter((x) => x.role == "mentor"); if (mentorList.length > 0) { for (let index = 0; index < mentorList.length; index++) { const e = await mentorList[index]; - mentors += e.fullname; - if (index < mentorList.length - 1) { - mentors += ", "; - } + + mentors.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + " " + (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : null; + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); - const chairman = chairmanData ? chairmanData.fullname : null; + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})` + : ""), + position: commanderData.position, + posType: commanderData.posType, + posLevel: commanderData.posLevel, + } + : null; + + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); + const chairman = + chairmanData != null + ? { + personal_id: chairmanData.personal_id, + dated: chairmanData.dated, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}, ${chairmanData.posType}: ${chairmanData.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; return new HttpSuccess({ person: profile ? profile : null, @@ -154,7 +176,12 @@ export class EvaluateChairmanController extends Controller { * */ @Get("") - async GetEvaluate(@Query() assign_id: string, @Query() evaluate_no?: string) { + async GetEvaluate( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string, + ) { + await new permission().PermissionGet(request, "SYS_PROBATION"); // ต้องปรับเป็น id ของคนที่ access เข้ามา const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], @@ -164,7 +191,7 @@ export class EvaluateChairmanController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; let evaluate: any = null; @@ -177,26 +204,29 @@ export class EvaluateChairmanController extends Controller { }, }); } else { - evaluate = await this.evaluateChairmanRepository.findOne({ + evaluate = await this.evaluateChairmanRepository.find({ where: { director_id, assign_id, }, }); + + if (evaluate) + evaluate = await evaluate.map((element: EvaluateChairman) => ({ + ...element, + no: Number(element.no), + })); } if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); } const assign = await this.assignRepository.findOne({ where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -220,36 +250,70 @@ export class EvaluateChairmanController extends Controller { const directorData = await this.assignDirectorRepository.find({ where: { assign_id }, + order: { ordering: "ASC" }, }); if (!directorData) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } - let mentors = ""; + let mentors = []; const mentorList = await directorData.filter((x) => x.role == "mentor"); if (mentorList.length > 0) { for (let index = 0; index < mentorList.length; index++) { const e = await mentorList[index]; - mentors += e.fullname; - if (index < mentorList.length - 1) { - mentors += ", "; - } + + mentors.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + " " + (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : null; + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); - const chairman = chairmanData ? chairmanData.fullname : null; + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})` + : ""), + position: commanderData.position, + posType: commanderData.posType, + posLevel: commanderData.posLevel, + } + : null; + + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); + const chairman = + chairmanData != null + ? { + personal_id: chairmanData.personal_id, + dated: chairmanData.dated, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}, ${chairmanData.posType}: ${chairmanData.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; return new HttpSuccess({ experimentee: experimentee, @@ -271,8 +335,10 @@ export class EvaluateChairmanController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateChairman, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -281,7 +347,7 @@ export class EvaluateChairmanController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -291,10 +357,7 @@ export class EvaluateChairmanController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -313,9 +376,7 @@ export class EvaluateChairmanController extends Controller { : 0, behavior_other_desc: requestBody.behavior_orther.text, behavior_other_level: - requestBody.behavior_orther.text != "" - ? Number(requestBody.behavior_orther.level) - : 0, + requestBody.behavior_orther.text != "" ? Number(requestBody.behavior_orther.level) : 0, createdUserId: request.user.sub, createdFullName: request.user.name, @@ -359,11 +420,13 @@ export class EvaluateChairmanController extends Controller { */ @Put("") async UpdateData( - @Query() assign_id: string, + // @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateChairman, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + let evaluate = await this.evaluateChairmanRepository.findOne({ where: { id: evaluate_id }, }); @@ -371,7 +434,7 @@ export class EvaluateChairmanController extends Controller { const before = evaluate; if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); } evaluate.chairman_dated = requestBody.chairman_dated; @@ -384,9 +447,7 @@ export class EvaluateChairmanController extends Controller { ? requestBody.achievement_other.text : ""; evaluate.achievement_other_level = - requestBody.achievement_other.text != "" - ? Number(requestBody.achievement_other.level) - : 0; + requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0; evaluate.conduct1_level = requestBody.conduct1_level; evaluate.conduct2_level = requestBody.conduct2_level; @@ -402,24 +463,15 @@ export class EvaluateChairmanController extends Controller { evaluate.discipline5_level = requestBody.discipline5_level; evaluate.behavior_other_desc = requestBody.behavior_orther.text; evaluate.behavior_other_level = - requestBody.behavior_orther.text != "" - ? Number(requestBody.behavior_orther.level) - : 0; + requestBody.behavior_orther.text != "" ? Number(requestBody.behavior_orther.level) : 0; evaluate.develop_orientation_score = requestBody.develop_orientation_score; - evaluate.develop_self_learning_score = - requestBody.develop_self_learning_score; - evaluate.develop_training_seminar_score = - requestBody.develop_training_seminar_score; - evaluate.develop_other_training_score = - requestBody.develop_other_training_score; - evaluate.develop_orientation_percent = - requestBody.develop_orientation_percent; - evaluate.develop_self_learning_percent = - requestBody.develop_self_learning_percent; - evaluate.develop_training_seminar_percent = - requestBody.develop_training_seminar_percent; - evaluate.develop_other_training_percent = - requestBody.develop_other_training_percent; + evaluate.develop_self_learning_score = requestBody.develop_self_learning_score; + evaluate.develop_training_seminar_score = requestBody.develop_training_seminar_score; + evaluate.develop_other_training_score = requestBody.develop_other_training_score; + evaluate.develop_orientation_percent = requestBody.develop_orientation_percent; + evaluate.develop_self_learning_percent = requestBody.develop_self_learning_percent; + evaluate.develop_training_seminar_percent = requestBody.develop_training_seminar_percent; + evaluate.develop_other_training_percent = requestBody.develop_other_training_percent; evaluate.develop_result = requestBody.develop_result; evaluate.achievement_score = requestBody.achievement_score; evaluate.achievement_score_total = requestBody.achievement_score_total; diff --git a/src/controllers/EvaluateController.ts b/src/controllers/EvaluateController.ts index 9dcf649..a784d44 100644 --- a/src/controllers/EvaluateController.ts +++ b/src/controllers/EvaluateController.ts @@ -20,27 +20,22 @@ import { AppDataSource } from "../database/data-source"; import { AssignDirector } from "../entities/AssignDirector"; import HttpError from "../interfaces/http-error"; import { Assign } from "../entities/Assign"; -import { - CreateEvaluateCommander, - EvaluateCommander, -} from "../entities/EvaluateCommander"; +import { CreateEvaluateCommander, EvaluateCommander } from "../entities/EvaluateCommander"; import { Personal } from "../entities/Personal"; import CallAPI from "../interfaces/call-api"; - -@Route("api/v1/evaluate") +import permission from "../interfaces/permission"; +@Route("api/v1/probation/evaluate") @Tags("แบบประเมินผล (ผู้บังคับบัญชา)") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class EvaluateController extends Controller { - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); private assignRepository = AppDataSource.getRepository(Assign); - private evaluateCommanderRepository = - AppDataSource.getRepository(EvaluateCommander); + private evaluateCommanderRepository = AppDataSource.getRepository(EvaluateCommander); private personalRepository = AppDataSource.getRepository(Personal); /** @@ -50,10 +45,9 @@ export class EvaluateController extends Controller { * */ @Get("create") - async CreateEvaluate( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { + async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -62,7 +56,7 @@ export class EvaluateController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -71,10 +65,7 @@ export class EvaluateController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -82,10 +73,7 @@ export class EvaluateController extends Controller { ...assign.profile, id: assign.profile.personal_id, name: - assign.profile.prefixName + - assign.profile.firstName + - " " + - assign.profile.lastName, + assign.profile.prefixName + assign.profile.firstName + " " + assign.profile.lastName, Oc: assign.profile.organization, } : null); @@ -102,23 +90,18 @@ export class EvaluateController extends Controller { ? assign.date_start : findEndDate(evaluate_amount * 3, assign.date_start); - const commanderData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + const commanderData = await this.assignDirectorRepository.findOne({ + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { personal_id: director_id }, }); - - const commander = await commanderData.map((element) => ({ - ...element, - name: element.fullname, - label: `${element.fullname} (${element.position}, ${element.posType}: ${element.posLevel})`, - })); + if (!commanderData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา"); + } + const commander = await { + ...commanderData, + name: commanderData.fullname, + label: `${commanderData.fullname} (${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})`, + }; return new HttpSuccess({ person: profile, @@ -137,7 +120,13 @@ export class EvaluateController extends Controller { * */ @Get("") - async GetEvaluate(@Query() assign_id: string, @Query() evaluate_no?: string) { + async GetEvaluate( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string, + ) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + // ต้องปรับเป็น id ของคนที่ access เข้ามา const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], @@ -147,7 +136,7 @@ export class EvaluateController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; let evaluate: any = null; @@ -160,26 +149,29 @@ export class EvaluateController extends Controller { }, }); } else { - evaluate = await this.evaluateCommanderRepository.findOne({ + evaluate = await this.evaluateCommanderRepository.find({ where: { director_id, assign_id, }, }); + + if (evaluate) + evaluate = await evaluate.map((element: EvaluateCommander) => ({ + ...element, + no: Number(element.no), + })); } if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); } const assign = await this.assignRepository.findOne({ where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } // const profile = await (assign.profile @@ -208,14 +200,7 @@ export class EvaluateController extends Controller { // : findEndDate(evaluate_amount * 3, assign.date_start); const directorData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { personal_id: director_id }, }); @@ -262,8 +247,10 @@ export class EvaluateController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateCommander, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -272,7 +259,7 @@ export class EvaluateController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -282,10 +269,7 @@ export class EvaluateController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -304,9 +288,7 @@ export class EvaluateController extends Controller { : 0, behavior_other_desc: requestBody.behavior_orther.text, behavior_other_level: - requestBody.behavior_orther.text != "" - ? Number(requestBody.behavior_orther.level) - : 0, + requestBody.behavior_orther.text != "" ? Number(requestBody.behavior_orther.level) : 0, createdUserId: request.user.sub, createdFullName: request.user.name, @@ -350,11 +332,13 @@ export class EvaluateController extends Controller { */ @Put("") async UpdateData( - @Query() assign_id: string, + // @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateCommander, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + let evaluate = await this.evaluateCommanderRepository.findOne({ where: { id: evaluate_id }, }); @@ -362,7 +346,7 @@ export class EvaluateController extends Controller { const before = evaluate; if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); } evaluate.commander_dated = requestBody.commander_dated; @@ -376,9 +360,7 @@ export class EvaluateController extends Controller { ? requestBody.achievement_other.text : ""; evaluate.achievement_other_level = - requestBody.achievement_other.text != "" - ? Number(requestBody.achievement_other.level) - : 0; + requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0; evaluate.conduct1_level = requestBody.conduct1_level; evaluate.conduct2_level = requestBody.conduct2_level; @@ -394,9 +376,7 @@ export class EvaluateController extends Controller { evaluate.discipline5_level = requestBody.discipline5_level; evaluate.behavior_other_desc = requestBody.behavior_orther.text; evaluate.behavior_other_level = - requestBody.behavior_orther.text != "" - ? Number(requestBody.behavior_orther.level) - : 0; + requestBody.behavior_orther.text != "" ? Number(requestBody.behavior_orther.level) : 0; evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; evaluate.orientation = requestBody.orientation; diff --git a/src/controllers/EvaluateRecordController.ts b/src/controllers/EvaluateRecordController.ts index 1b74269..48c01af 100644 --- a/src/controllers/EvaluateRecordController.ts +++ b/src/controllers/EvaluateRecordController.ts @@ -22,34 +22,25 @@ import HttpError from "../interfaces/http-error"; import { Assign } from "../entities/Assign"; import { Personal } from "../entities/Personal"; import { AssignOutput } from "../entities/AssignOutput"; -import { - CreateEvaluateAssessor, - EvaluateAssessor, -} from "../entities/EvaluateAssessor"; -import { - CreateEvaluateAchievement, - EvaluateAchievement, -} from "../entities/EvaluateAchievement"; +import { CreateEvaluateAssessor, EvaluateAssessor } from "../entities/EvaluateAssessor"; +import { CreateEvaluateAchievement, EvaluateAchievement } from "../entities/EvaluateAchievement"; import CallAPI from "../interfaces/call-api"; - -@Route("api/v1/evaluate-record") +import permission from "../interfaces/permission"; +@Route("api/v1/probation/evaluate-record") @Tags("แบบบันทึกผล") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class EvaluateRecordController extends Controller { - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); private assignRepository = AppDataSource.getRepository(Assign); private personalRepository = AppDataSource.getRepository(Personal); private assignOutputRepository = AppDataSource.getRepository(AssignOutput); - private evaluateAssessorRepository = - AppDataSource.getRepository(EvaluateAssessor); - private evaluateAchievementRepository = - AppDataSource.getRepository(EvaluateAchievement); + private evaluateAssessorRepository = AppDataSource.getRepository(EvaluateAssessor); + private evaluateAchievementRepository = AppDataSource.getRepository(EvaluateAchievement); /** * API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล @@ -58,19 +49,11 @@ export class EvaluateRecordController extends Controller { * */ @Get("create") - async GetCreate( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { + async GetCreate(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const directorData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { assign_id, role: "mentor", @@ -78,7 +61,7 @@ export class EvaluateRecordController extends Controller { }); if (!directorData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const director = await { @@ -96,10 +79,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -117,16 +97,12 @@ export class EvaluateRecordController extends Controller { }, }); if (!profileData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const profile = await { id: profileData.personal_id, - name: - profileData.prefixName + - profileData.firstName + - " " + - profileData.lastName, + name: profileData.prefixName + profileData.firstName + " " + profileData.lastName, positionName: profileData.positionName, positionLevelName: profileData.positionLevelName, Oc: profileData.organization, @@ -153,22 +129,12 @@ export class EvaluateRecordController extends Controller { : findEndDate(evaluate_amount * 2, assign.date_start)); var commanderData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { personal_id: director_id }, }); if (!commanderData) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้บังคับบัญชา" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา"); } const commander = await { @@ -195,7 +161,13 @@ export class EvaluateRecordController extends Controller { * */ @Get("") - async GetData(@Query() assign_id: string, @Query() evaluate_no?: string) { + async GetData( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string, + ) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -204,7 +176,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -221,23 +193,18 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); } const achievementData = await this.evaluateAchievementRepository.find({ - select: [ - "output_desc", - "evaluate_expect_level", - "output_desc", - "evaluate_output_level", - ], + select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"], where: { evaluate_id: evaluate.id, }, order: { output_id: "ASC" }, }); if (!achievementData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const achievements = await achievementData.map((achievement) => { @@ -252,7 +219,7 @@ export class EvaluateRecordController extends Controller { id: evaluate.id, director_id: evaluate.director_id, assign_id, - no: evaluate.no, + no: Number(evaluate.no), date_start: evaluate.date_start, date_finish: evaluate.date_finish, assessor_dated: evaluate.assessor_dated, @@ -299,25 +266,23 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } await Promise.all( evaluate.map(async (element: any, index: number) => { - const achievementData = await this.evaluateAchievementRepository.find( - { - select: [ - "output_desc", - "evaluate_expect_level", - "output_desc", - "evaluate_output_level", - ], - where: { - evaluate_id: element.id, - }, - order: { output_id: "ASC" }, - } - ); + const achievementData = await this.evaluateAchievementRepository.find({ + select: [ + "output_desc", + "evaluate_expect_level", + "output_desc", + "evaluate_output_level", + ], + where: { + evaluate_id: element.id, + }, + order: { output_id: "ASC" }, + }); const achievements = await achievementData.map((achievement) => { return { @@ -331,7 +296,7 @@ export class EvaluateRecordController extends Controller { id: element.id, director_id: element.director_id, assign_id, - no: element.no, + no: Number(element.no), date_start: element.date_start, date_finish: element.date_finish, assessor_dated: element.assessor_dated, @@ -368,7 +333,7 @@ export class EvaluateRecordController extends Controller { updatedAt: element.updatedAt, achievements: achievements, }; - }) + }), ); } @@ -379,10 +344,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -405,14 +367,7 @@ export class EvaluateRecordController extends Controller { })); const directorData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { personal_id: director_id }, }); @@ -440,8 +395,10 @@ export class EvaluateRecordController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -450,7 +407,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -460,10 +417,7 @@ export class EvaluateRecordController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -482,9 +436,7 @@ export class EvaluateRecordController extends Controller { : 0, behavior_other_desc: requestBody.behavio_orther.text, behavior_other_level: - requestBody.behavio_orther.text != "" - ? Number(requestBody.behavio_orther.level) - : 0, + requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0, behavior_strength_desc: requestBody.behavior_strength_desc, behavior_improve_desc: requestBody.behavior_improve_desc, orientation: requestBody.orientation, @@ -497,10 +449,9 @@ export class EvaluateRecordController extends Controller { updateFullName: request.user.name, }; - const evaluateAssessor = await this.evaluateAssessorRepository.save( - postData, - { data: request } - ); + const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, { + data: request, + }); if (evaluateAssessor) { await Promise.all( @@ -513,9 +464,7 @@ export class EvaluateRecordController extends Controller { assessor_id: director_id, evaluate_expect_level: Number(expenct.level), output_desc: requestBody.evaluate_ouptut[index].text, - evaluate_output_level: Number( - requestBody.evaluate_ouptut[index].level - ), + evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level), createdUserId: request.user.sub, createdFullName: request.user.name, updateUserId: request.user.sub, @@ -524,7 +473,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -564,8 +513,10 @@ export class EvaluateRecordController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -574,7 +525,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -586,7 +537,7 @@ export class EvaluateRecordController extends Controller { const before = evaluate; if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); } evaluate.assessor_dated = requestBody.assessor_dated; @@ -599,9 +550,7 @@ export class EvaluateRecordController extends Controller { ? requestBody.achievement_other.text : ""; evaluate.achievement_other_level = - requestBody.achievement_other.text != "" - ? Number(requestBody.achievement_other.level) - : 0; + requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0; evaluate.achievement_strength_desc = requestBody.achievement_strength_desc; evaluate.achievement_improve_desc = requestBody.achievement_improve_desc; @@ -619,9 +568,7 @@ export class EvaluateRecordController extends Controller { evaluate.discipline5_level = requestBody.discipline5_level; evaluate.behavior_other_desc = requestBody.behavio_orther.text; evaluate.behavior_other_level = - requestBody.behavio_orther.text != "" - ? Number(requestBody.behavio_orther.level) - : 0; + requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0; evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; evaluate.orientation = requestBody.orientation; @@ -631,10 +578,9 @@ export class EvaluateRecordController extends Controller { evaluate.updateUserId = request.user.sub; evaluate.updateFullName = request.user.name; - const evaluateAssessor = await this.evaluateAssessorRepository.save( - evaluate, - { data: request } - ); + const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, { + data: request, + }); if (evaluateAssessor) { await this.evaluateAchievementRepository.delete({ @@ -649,9 +595,7 @@ export class EvaluateRecordController extends Controller { assessor_id: director_id, evaluate_expect_level: Number(expenct.level), output_desc: requestBody.evaluate_ouptut[index].text, - evaluate_output_level: Number( - requestBody.evaluate_ouptut[index].level - ), + evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level), createdUserId: request.user.sub, createdFullName: request.user.name, updateUserId: request.user.sub, @@ -660,7 +604,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -676,19 +620,11 @@ export class EvaluateRecordController extends Controller { * */ @Get("create/commander") - async GetCreateCommander( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { + async GetCreateCommander(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const directorData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { assign_id, role: "commander", @@ -696,7 +632,7 @@ export class EvaluateRecordController extends Controller { }); if (!directorData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const director = await { @@ -714,10 +650,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -735,16 +668,12 @@ export class EvaluateRecordController extends Controller { }, }); if (!profileData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const profile = await { id: profileData.personal_id, - name: - profileData.prefixName + - profileData.firstName + - " " + - profileData.lastName, + name: profileData.prefixName + profileData.firstName + " " + profileData.lastName, positionName: profileData.positionName, positionLevelName: profileData.positionLevelName, Oc: profileData.organization, @@ -789,9 +718,12 @@ export class EvaluateRecordController extends Controller { */ @Get("commander") async GetDataCommander( + @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -800,7 +732,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -817,23 +749,18 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); } const achievementData = await this.evaluateAchievementRepository.find({ - select: [ - "output_desc", - "evaluate_expect_level", - "output_desc", - "evaluate_output_level", - ], + select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"], where: { evaluate_id: evaluate.id, }, order: { output_id: "ASC" }, }); if (!achievementData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const achievements = await achievementData.map((achievement) => { @@ -848,7 +775,7 @@ export class EvaluateRecordController extends Controller { id: evaluate.id, director_id: evaluate.director_id, assign_id, - no: evaluate.no, + no: Number(evaluate.no), date_start: evaluate.date_start, date_finish: evaluate.date_finish, assessor_dated: evaluate.assessor_dated, @@ -895,25 +822,23 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } await Promise.all( evaluate.map(async (element: any, index: number) => { - const achievementData = await this.evaluateAchievementRepository.find( - { - select: [ - "output_desc", - "evaluate_expect_level", - "output_desc", - "evaluate_output_level", - ], - where: { - evaluate_id: element.id, - }, - order: { output_id: "ASC" }, - } - ); + const achievementData = await this.evaluateAchievementRepository.find({ + select: [ + "output_desc", + "evaluate_expect_level", + "output_desc", + "evaluate_output_level", + ], + where: { + evaluate_id: element.id, + }, + order: { output_id: "ASC" }, + }); const achievements = await achievementData.map((achievement) => { return { @@ -927,7 +852,7 @@ export class EvaluateRecordController extends Controller { id: element.id, director_id: element.director_id, assign_id, - no: element.no, + no: Number(element.no), date_start: element.date_start, date_finish: element.date_finish, assessor_dated: element.assessor_dated, @@ -964,7 +889,7 @@ export class EvaluateRecordController extends Controller { updatedAt: element.updatedAt, achievements: achievements, }; - }) + }), ); } @@ -975,10 +900,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -1001,14 +923,7 @@ export class EvaluateRecordController extends Controller { })); const directorData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "dated", - "fullname", - "position", - "posType", - "posLevel", - ], + select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], where: { personal_id: director_id }, }); @@ -1036,8 +951,10 @@ export class EvaluateRecordController extends Controller { async PostDataCommander( @Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -1046,7 +963,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -1056,10 +973,7 @@ export class EvaluateRecordController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -1078,9 +992,7 @@ export class EvaluateRecordController extends Controller { : 0, behavior_other_desc: requestBody.behavio_orther.text, behavior_other_level: - requestBody.behavio_orther.text != "" - ? Number(requestBody.behavio_orther.level) - : 0, + requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0, behavior_strength_desc: requestBody.behavior_strength_desc, behavior_improve_desc: requestBody.behavior_improve_desc, orientation: requestBody.orientation, @@ -1093,10 +1005,9 @@ export class EvaluateRecordController extends Controller { updateFullName: request.user.name, }; - const evaluateAssessor = await this.evaluateAssessorRepository.save( - postData, - { data: request } - ); + const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, { + data: request, + }); if (evaluateAssessor) { await Promise.all( requestBody.evaluate_expenct_level.map(async (expenct, index) => { @@ -1107,9 +1018,7 @@ export class EvaluateRecordController extends Controller { assessor_id: director_id, evaluate_expect_level: Number(expenct.level), output_desc: requestBody.evaluate_ouptut[index].text, - evaluate_output_level: Number( - requestBody.evaluate_ouptut[index].level - ), + evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level), createdUserId: request.user.sub, createdFullName: request.user.name, updateUserId: request.user.sub, @@ -1118,7 +1027,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -1157,8 +1066,10 @@ export class EvaluateRecordController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -1167,7 +1078,7 @@ export class EvaluateRecordController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -1177,7 +1088,7 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); } const before = evaluate; @@ -1191,9 +1102,7 @@ export class EvaluateRecordController extends Controller { ? requestBody.achievement_other.text : ""; evaluate.achievement_other_level = - requestBody.achievement_other.text != "" - ? Number(requestBody.achievement_other.level) - : 0; + requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0; evaluate.achievement_strength_desc = requestBody.achievement_strength_desc; evaluate.achievement_improve_desc = requestBody.achievement_improve_desc; @@ -1211,9 +1120,7 @@ export class EvaluateRecordController extends Controller { evaluate.discipline5_level = requestBody.discipline5_level; evaluate.behavior_other_desc = requestBody.behavio_orther.text; evaluate.behavior_other_level = - requestBody.behavio_orther.text != "" - ? Number(requestBody.behavio_orther.level) - : 0; + requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0; evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; evaluate.orientation = requestBody.orientation; @@ -1223,10 +1130,9 @@ export class EvaluateRecordController extends Controller { evaluate.updateUserId = request.user.sub; evaluate.updateFullName = request.user.name; - const evaluateAssessor = await this.evaluateAssessorRepository.save( - evaluate, - { data: request } - ); + const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, { + data: request, + }); if (evaluateAssessor) { await this.evaluateAchievementRepository.delete({ @@ -1241,9 +1147,7 @@ export class EvaluateRecordController extends Controller { assessor_id: director_id, evaluate_expect_level: Number(expenct.level), output_desc: requestBody.evaluate_ouptut[index].text, - evaluate_output_level: Number( - requestBody.evaluate_ouptut[index].level - ), + evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level), createdUserId: request.user.sub, createdFullName: request.user.name, updateUserId: request.user.sub, @@ -1252,7 +1156,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index d705581..c740f2e 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -20,35 +20,26 @@ import { AppDataSource } from "../database/data-source"; import { AssignDirector } from "../entities/AssignDirector"; import HttpError from "../interfaces/http-error"; import { Assign } from "../entities/Assign"; -import { - CreateEvaluateCommander, - EvaluateCommander, -} from "../entities/EvaluateCommander"; import { Personal } from "../entities/Personal"; import CallAPI from "../interfaces/call-api"; import { EvaluateChairman } from "../entities/EvaluateChairman"; -import { - CreateEvaluateResult, - EvaluateResult, -} from "../entities/EvaluateResult"; +import { CreateEvaluateResult, EvaluateResult } from "../entities/EvaluateResult"; +import permission from "../interfaces/permission"; -@Route("api/v1/evaluate-result") +@Route("api/v1/probation/evaluate-result") @Tags("แบบรายงานการประเมินฯ") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class EvaluateResultController extends Controller { - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); private assignRepository = AppDataSource.getRepository(Assign); - private evaluateChairmanRepository = - AppDataSource.getRepository(EvaluateChairman); + private evaluateChairmanRepository = AppDataSource.getRepository(EvaluateChairman); private personalRepository = AppDataSource.getRepository(Personal); - private evaluateResultRepository = - AppDataSource.getRepository(EvaluateResult); + private evaluateResultRepository = AppDataSource.getRepository(EvaluateResult); /** * API ข้อมูลตอนกดสร้างแบบรายงานการประเมินฯ @@ -57,19 +48,15 @@ export class EvaluateResultController extends Controller { * */ @Get("create") - async CreateEvaluate( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { + async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + const assign = await this.assignRepository.findOne({ relations: ["profile"], where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -77,46 +64,77 @@ export class EvaluateResultController extends Controller { ...assign.profile, id: assign.profile.personal_id, name: - assign.profile.prefixName + - assign.profile.firstName + - " " + - assign.profile.lastName, + assign.profile.prefixName + assign.profile.firstName + " " + assign.profile.lastName, Oc: assign.profile.organization, } : null); const directorData = await this.assignDirectorRepository.find({ where: { assign_id }, + order: { ordering: "ASC" }, }); if (!directorData) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } - let mentors = ""; + let mentors = []; const mentorList = await directorData.filter((x) => x.role == "mentor"); if (mentorList.length > 0) { for (let index = 0; index < mentorList.length; index++) { const e = await mentorList[index]; - mentors += e.fullname; - if (index < mentorList.length - 1) { - mentors += ", "; - } + + mentors.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + " " + (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : null; + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); - const chairman = chairmanData ? chairmanData.fullname : null; + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})` + : ""), + position: commanderData.position, + posType: commanderData.posType, + posLevel: commanderData.posLevel, + } + : null; + + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); + const chairman = + chairmanData != null + ? { + personal_id: chairmanData.personal_id, + dated: chairmanData.dated, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}, ${chairmanData.posType}: ${chairmanData.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; const resultData = await this.evaluateChairmanRepository.findOne({ select: [ @@ -131,7 +149,7 @@ export class EvaluateResultController extends Controller { }); if (!resultData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมินผล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมินผล"); } const develop_complete = await (resultData.develop_orientation_score > 0 && @@ -164,7 +182,13 @@ export class EvaluateResultController extends Controller { * */ @Get("") - async GetEvaluate(@Query() assign_id: string, @Query() evaluate_no?: string) { + async GetEvaluate( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string, + ) { + await new permission().PermissionGet(request, "SYS_PROBATION"); + // ต้องปรับเป็น id ของคนที่ access เข้ามา const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], @@ -174,11 +198,11 @@ export class EvaluateResultController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; - const evaluate = await this.evaluateChairmanRepository.findOne({ + const evaluate = await this.evaluateResultRepository.findOne({ where: { director_id, assign_id, @@ -186,20 +210,17 @@ export class EvaluateResultController extends Controller { }); if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + return new HttpSuccess(null); } const assign = await this.assignRepository.findOne({ where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } - const experimenteeData = await this.personalRepository.find({ + const experimenteeData = await this.personalRepository.findOne({ select: [ "personal_id", "prefixName", @@ -212,44 +233,82 @@ export class EvaluateResultController extends Controller { where: { personal_id: assign.personal_id }, }); - const experimentee = await experimenteeData.map((element) => ({ - ...element, - name: element.prefixName + element.firstName + " " + element.lastName, - Oc: element.organization, - })); + if (!experimenteeData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + const experimentee = await { + ...experimenteeData, + name: + experimenteeData.prefixName + experimenteeData.firstName + " " + experimenteeData.lastName, + Oc: experimenteeData.organization, + }; const directorData = await this.assignDirectorRepository.find({ where: { assign_id }, + order: { ordering: "ASC" }, }); if (!directorData) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } - let mentors = ""; + let mentors = []; const mentorList = await directorData.filter((x) => x.role == "mentor"); if (mentorList.length > 0) { for (let index = 0; index < mentorList.length; index++) { const e = await mentorList[index]; - mentors += e.fullname; - if (index < mentorList.length - 1) { - mentors += ", "; - } + + mentors.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + " " + (e.position ? `(${e.position}, ${e.posType}: ${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : null; + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); - const chairman = chairmanData ? chairmanData.fullname : null; + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})` + : ""), + position: commanderData.position, + posType: commanderData.posType, + posLevel: commanderData.posLevel, + } + : null; + + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); + const chairman = + chairmanData != null + ? { + personal_id: chairmanData.personal_id, + dated: chairmanData.dated, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}, ${chairmanData.posType}: ${chairmanData.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; return new HttpSuccess({ commander, @@ -271,8 +330,10 @@ export class EvaluateResultController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateResult, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], where: { @@ -281,7 +342,7 @@ export class EvaluateResultController extends Controller { }, }); if (!director) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } const director_id = director.personal_id; @@ -291,10 +352,7 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -304,8 +362,7 @@ export class EvaluateResultController extends Controller { no: 1, personal_id: assign.personal_id, date_start: requestBody.start_date, - expand_month: - requestBody.pass_result == 3 ? Number(requestBody.expand_month) : 0, + expand_month: requestBody.pass_result == 3 ? Number(requestBody.expand_month) : 0, createdUserId: request.user.sub, createdFullName: request.user.name, @@ -323,7 +380,7 @@ export class EvaluateResultController extends Controller { }); if (!personal) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } personal.probation_status = requestBody.pass_result == 1 @@ -366,8 +423,10 @@ export class EvaluateResultController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateResult, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + let evaluate = await this.evaluateResultRepository.findOne({ where: { id: evaluate_id }, }); @@ -375,7 +434,7 @@ export class EvaluateResultController extends Controller { const before = evaluate; if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); } evaluate.date_start = requestBody.start_date; @@ -383,7 +442,9 @@ export class EvaluateResultController extends Controller { evaluate.develop_complete = requestBody.develop_complete; evaluate.pass_result = requestBody.pass_result; evaluate.expand_month = - requestBody.pass_result == 3 ? requestBody.expand_month : 0; + requestBody.pass_result && requestBody.pass_result == 3 + ? Number(requestBody.expand_month) + : 0; evaluate.reson = requestBody.reson; evaluate.chairman_dated = requestBody.chairman_dated; @@ -400,17 +461,14 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const personal = await this.personalRepository.findOne({ where: { personal_id: assign.personal_id }, }); if (!personal) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } personal.probation_status = requestBody.pass_result == 1 diff --git a/src/controllers/MyController.ts b/src/controllers/MyController.ts index 7f14906..173310d 100644 --- a/src/controllers/MyController.ts +++ b/src/controllers/MyController.ts @@ -1,11 +1,11 @@ -import { Controller, Get, Route, Security, Tags } from "tsoa"; +import { Controller, Get, Route, Tags } from "tsoa"; -@Route("/hello") +@Route("/probation/hello") @Tags("Test") -@Security("bearerAuth") +// @Security("bearerAuth") export class AppController extends Controller { @Get() public async GET() { - return { message: "Hello Development" }; + return { message: "Hello Probation System" }; } } diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 5cd7ddd..1e19a09 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -21,12 +21,12 @@ import { Personal, PostPersonal } from "../entities/Personal"; import permission from "../interfaces/permission"; import { Assign } from "../entities/Assign"; -@Route("api/v1/personal") +@Route("api/v1/probation/personal") @Tags("Personal") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class PersonalController extends Controller { @@ -40,43 +40,25 @@ export class PersonalController extends Controller { * */ @Post("add") - async AddPersonal( - @Body() requestBody: PostPersonal, - @Request() request: RequestWithUser - ) { + async AddPersonal(@Body() requestBody: PostPersonal, @Request() request: RequestWithUser) { await new permission().PermissionCreate(request, "SYS_PROBATION"); const checkPersonal: number = await this.personalRepository.count({ where: { personal_id: requestBody.id }, }); if (checkPersonal > 0) { - return new HttpError( - HttpStatusCode.BAD_REQUEST, - "ผู้ทดลองปฏิบัติหน้าที่ราชการนี้มีอยู่แล้ว" - ); + throw new HttpError(HttpStatusCode.BAD_REQUEST, "ผู้ทดลองปฏิบัติหน้าที่ราชการนี้มีอยู่แล้ว"); } - let organization = await (requestBody.orgChild4Name - ? requestBody.orgChild4Name + "/" - : ""); - organization += await (requestBody.orgChild3Name - ? requestBody.orgChild3Name + "/" - : ""); - organization += await (requestBody.orgChild2Name - ? requestBody.orgChild2Name + "/" - : ""); - organization += await (requestBody.orgChild1Name - ? requestBody.orgChild1Name + "/" - : ""); - organization += await (requestBody.orgRootName - ? requestBody.orgRootName - : ""); + let organization = await (requestBody.orgChild4Name ? requestBody.orgChild4Name + "/" : ""); + organization += await (requestBody.orgChild3Name ? requestBody.orgChild3Name + "/" : ""); + organization += await (requestBody.orgChild2Name ? requestBody.orgChild2Name + "/" : ""); + organization += await (requestBody.orgChild1Name ? requestBody.orgChild1Name + "/" : ""); + organization += await (requestBody.orgRootName ? requestBody.orgRootName : ""); const personalData = Object.assign(new Personal()); personalData.personal_id = requestBody.id; - personalData.order_number = requestBody.order_number - ? requestBody.order_number - : ""; + personalData.order_number = requestBody.order_number ? requestBody.order_number : ""; personalData.probation_status = 1; personalData.createdUserId = request.user.sub; personalData.createdFullName = request.user.name; @@ -87,12 +69,8 @@ export class PersonalController extends Controller { personalData.firstName = requestBody.firstName; personalData.lastName = requestBody.lastName; personalData.isProbation = requestBody.isProbation ? 1 : 0; - personalData.positionLevelName = requestBody.posLevelName - ? requestBody.posLevelName - : ""; - personalData.positionName = requestBody.position - ? requestBody.position - : ""; + personalData.positionLevelName = requestBody.posLevelName ? requestBody.posLevelName : ""; + personalData.positionName = requestBody.position ? requestBody.position : ""; personalData.positionLineName = requestBody.posLineName; personalData.positionTypeName = requestBody.posTypeName; personalData.posNo = requestBody.posNo ? requestBody.posNo : ""; @@ -135,10 +113,7 @@ export class PersonalController extends Controller { }); if (!lists) { - return new HttpError( - HttpStatusCode.INTERNAL_SERVER_ERROR, - "ไม่สามารถแสดงข้อมูลได้" - ); + throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, "ไม่สามารถแสดงข้อมูลได้"); } let result: any = []; @@ -163,7 +138,7 @@ export class PersonalController extends Controller { order_number: item.order_number, probation_status: item.probation_status, }); - }) + }), ); return new HttpSuccess({ data: result, total: total }); @@ -176,17 +151,14 @@ export class PersonalController extends Controller { * */ @Get("") - async GetPersonal( - @Request() request: RequestWithUser, - @Query() personal_id: string - ) { - await new permission().PermissionList(request, "SYS_PROBATION"); + async GetPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { + await new permission().PermissionGet(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ where: { personal_id: personal_id }, }); if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } const probation_no = await this.assignRepository.count({ diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index c81ee29..bd97889 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -1,1119 +1,1132 @@ -import { - Controller, - Route, - Security, - Tags, - Body, - Request, - SuccessResponse, - Response, - Get, - Query, - Put, -} from "tsoa"; -import { AppDataSource } from "../database/data-source"; -import HttpSuccess from "../interfaces/http-success"; -import HttpStatusCode from "../interfaces/http-status"; -import HttpError from "../interfaces/http-error"; -import { RequestWithUser } from "../middlewares/user"; -import { DataPass, setLogDataDiff } from "../interfaces/utils"; -import { Personal } from "../entities/Personal"; -import { Assign } from "../entities/Assign"; -import { EvaluateChairman } from "../entities/EvaluateChairman"; -import { EvaluateResult } from "../entities/EvaluateResult"; -import { EvaluateAssessor } from "../entities/EvaluateAssessor"; -import { AssignDirector } from "../entities/AssignDirector"; -import { EvaluateAchievement } from "../entities/EvaluateAchievement"; -import { EvaluateCommander } from "../entities/EvaluateCommander"; -import CallAPI from "../interfaces/call-api"; +import { Controller, Route, Security, Tags, Body, Request, SuccessResponse, Response, Get, Query, Put, Post } from "tsoa" +import { AppDataSource } from "../database/data-source" +import HttpSuccess from "../interfaces/http-success" +import HttpStatusCode from "../interfaces/http-status" +import HttpError from "../interfaces/http-error" +import { RequestWithUser } from "../middlewares/user" +import { DataPass, setLogDataDiff } from "../interfaces/utils" +import { Personal } from "../entities/Personal" +import { Assign } from "../entities/Assign" +import { EvaluateChairman } from "../entities/EvaluateChairman" +import { EvaluateResult } from "../entities/EvaluateResult" +import { EvaluateAssessor } from "../entities/EvaluateAssessor" +import { AssignDirector } from "../entities/AssignDirector" +import { EvaluateAchievement } from "../entities/EvaluateAchievement" +import { EvaluateCommander } from "../entities/EvaluateCommander" +import CallAPI from "../interfaces/call-api" +import { Double, In } from "typeorm" +import Extension from "../interfaces/extension" -@Route("api/v1/report") +@Route("api/v1/probation/report") @Tags("Report") @Security("bearerAuth") -@Response( - HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" -) +@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class ReportController extends Controller { - private evaluateChairmanRepository = - AppDataSource.getRepository(EvaluateChairman); - private evaluateResultRepository = - AppDataSource.getRepository(EvaluateResult); - private personalRepository = AppDataSource.getRepository(Personal); - private evaluateAssessorRepository = - AppDataSource.getRepository(EvaluateAssessor); - private assignDirectorRepository = - AppDataSource.getRepository(AssignDirector); - private evaluateAchievementRepository = - AppDataSource.getRepository(EvaluateAchievement); - private evaluateCommanderRepository = - AppDataSource.getRepository(EvaluateCommander); - - /** - * API สำหรับออกรายงาน - * - * @summary ผลการทดลองปฏิบัติราชการ - * - */ - @Get("") - async GetReport( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { - const evaluate = await this.evaluateChairmanRepository.findOne({ - where: { assign_id }, - }); - - const result = await this.evaluateResultRepository.findOne({ - where: { assign_id }, - }); - - if (!evaluate || !result) { - return new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ" - ); - } - - const develop_total_score = await (Number( - evaluate.develop_orientation_score - ) + - Number(evaluate.develop_self_learning_score) + - Number(evaluate.develop_training_seminar_score) + - Number(evaluate.develop_other_training_score)); - const develop_total_percent = await (Number( - evaluate.develop_orientation_percent - ) + - Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_self_learning_percent) + - Number(evaluate.develop_training_seminar_percent)); - - const data = await { - develop_orientation_score: evaluate.develop_orientation_score, - develop_self_learning_score: evaluate.develop_self_learning_score, - develop_training_seminar_score: evaluate.develop_training_seminar_score, - develop_other_training_score: evaluate.develop_other_training_score, - develop_total_score, - develop_orientation_percent: evaluate.develop_orientation_percent, - develop_self_learning_percent: evaluate.develop_self_learning_percent, - develop_training_seminar_percent: - evaluate.develop_training_seminar_percent, - develop_other_training_percent: evaluate.develop_other_training_percent, - develop_total_percent, - develop_result: evaluate.develop_result, - achievement_score: evaluate.achievement_score, - achievement_score_total: evaluate.achievement_score_total, - achievement_percent: evaluate.achievement_percent, - achievement_result: evaluate.achievement_result, - behavior_score: evaluate.behavior_score, - behavior_score_total: evaluate.behavior_score_total, - behavior_percent: evaluate.behavior_percent, - behavior_result: evaluate.behavior_result, - sum_score: evaluate.sum_score, - sum_percent: evaluate.sum_percent, - reason: result.reson, - pass_result: result.pass_result, - evaluate_date: result.chairman_dated, - }; - - return new HttpSuccess(data); - } - - /** - * API แสดงรายการผู้ผ่านทดลองงาน - * - * @summary รายการผู้ผ่านทดลองงาน - * - */ - @Get("pass") - async GetPass(@Request() request: RequestWithUser) { - const lists = await this.personalRepository.find({ - where: { probation_status: 2 }, - }); - - let data: DataPass[] = []; - await Promise.all( - lists.map(async (list) => { - const assign = await AppDataSource.getRepository(Assign).findOne({ - select: ["date_start", "date_finish"], - where: { personal_id: list.personal_id }, - }); - - if (assign) - data.push({ - person: { - id: list.personal_id, - name: `${list.prefixName}${list.firstName} ${list.lastName}`, - }, - assign, - }); - }) - ); - - return new HttpSuccess(data); - } - - /** - * API แสดงรายการผู้ไม่ผ่านทดลองงาน - * - * @summary รายการคนไม่ผ่านการทดลองปฏิบัติราชการและรอไปออกคำสั่ง - * - */ - @Get("not-pass") - async GetDataNotPass(@Request() request: RequestWithUser) { - const lists = await this.personalRepository.find({ - where: { probation_status: 3 }, - }); - - let data: DataPass[] = []; - await Promise.all( - lists.map(async (list) => { - const assign = await AppDataSource.getRepository(Assign).findOne({ - select: ["date_start", "date_finish"], - where: { personal_id: list.personal_id }, - }); - - if (assign) - data.push({ - person: { - id: list.personal_id, - name: `${list.prefixName}${list.firstName} ${list.lastName}`, - }, - assign, - }); - }) - ); - - return new HttpSuccess(data); - } - - /** - * API แสดงรายการคนที่ถูกขยายระยะเวลาทดลองงาน - * - * @summary รายการคนที่ถูกขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการและรอไปออกคำสั่ง - * - */ - @Get("expand") - async GetDataExpand(@Request() request: RequestWithUser) { - const lists = await this.personalRepository.find({ - select: ["personal_id"], - where: { probation_status: 7 }, - }); - - return new HttpSuccess(lists); - } - - /** - * API สำหรับปรับสถานะการดึงไปออกคำสั่ง - * - * @summary ปรับสถานะการดึงไปออกคำสั่ง - * - */ - @Put("status") - async UpdateStatus( - @Query() personal_id: string, - @Body() requestBody: { command_no: string }, - @Request() request: RequestWithUser - ) { - const personal = await this.personalRepository.findOne({ - where: { personal_id }, - }); - const before = personal; - - if (!personal) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - personal.order_number = requestBody.command_no; - personal.probation_status = 8; - - this.personalRepository.save(personal, { data: request }); - setLogDataDiff(request, { before, after: personal }); - - const resultText = - (await personal.probation_status) === 2 - ? "ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ" - : "ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ"; - - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", - body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ ${resultText}`, - receiverUserId: personal_id, - payload: "", - isSendMail: false, - isSendInbox: true, - isSendNotification: true, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - - return new HttpSuccess(); - } - - /** - * API สำหรับปรับสถานะการดึงไปออกคำสั่ง - * - * @summary ปรับสถานะการดึงไปออกคำสั่ง - * - */ - @Put("change-status") - async ChangeStatus( - @Query() personal_id: string, - @Body() reqBody: { status: number }, - @Request() request: RequestWithUser - ) { - const person = await this.personalRepository.findOne({ - where: { personal_id }, - }); - const before = person; - - if (!person) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - person.probation_status = await reqBody.status; - await this.personalRepository.save(person, { data: request }); - setLogDataDiff(request, { before, after: person }); - - return new HttpSuccess(); - } - - /** - * API แสดงข้อมูลแบบบันทึกผลตาม id - * - * @summary ข้อมูลแบบบันทึกผลตาม id - * - */ - @Get("form-record") - async GetDataFormRecord( - @Query() id: string, - @Request() request: RequestWithUser - ) { - const evaluate = await this.evaluateAssessorRepository.findOne({ - where: { id }, - }); - - if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const directorData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "fullname", - "position", - "posType", - "posLevel", - "role", - "dated", - ], - where: { personal_id: evaluate.director_id }, - }); - - if (!directorData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const director = await { - ...directorData, - name: directorData.fullname, - position: directorData.position, - }; - - const achievements = await this.evaluateAchievementRepository.find({ - select: ["evaluate_expect_level", "evaluate_output_level"], - where: { evaluate_id: evaluate.id }, - }); - - if (!achievements) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - let achievement: any = []; - await Promise.all( - achievements.map(async (element) => { - const evaluate_expect_level = await { - col1: element.evaluate_expect_level == 1 ? "/" : "", - col2: element.evaluate_expect_level == 2 ? "/" : "", - col3: element.evaluate_expect_level == 3 ? "/" : "", - col4: element.evaluate_expect_level == 4 ? "/" : "", - col5: element.evaluate_expect_level == 5 ? "/" : "", - }; - - const evaluate_output_level = await { - col1: element.evaluate_output_level == 1 ? "/" : "", - col2: element.evaluate_output_level == 2 ? "/" : "", - col3: element.evaluate_output_level == 3 ? "/" : "", - col4: element.evaluate_output_level == 4 ? "/" : "", - col5: element.evaluate_output_level == 5 ? "/" : "", - }; - - achievement.push({ - ...element, - evaluate_expect_level, - evaluate_output_level, - }); - }) - ); - - const evaluateData = await { - id: evaluate.id, - no: evaluate.no, - date_start: evaluate.date_start, - date_finish: evaluate.date_finish, - sign_dated: evaluate.assessor_dated, - knowledge_level: { - col1: evaluate.knowledge_level == 1 ? "/" : "", - col2: evaluate.knowledge_level == 2 ? "/" : "", - col3: evaluate.knowledge_level == 3 ? "/" : "", - col4: evaluate.knowledge_level == 4 ? "/" : "", - col5: evaluate.knowledge_level == 5 ? "/" : "", - }, - skill_level: { - col1: evaluate.skill_level == 1 ? "/" : "", - col2: evaluate.skill_level == 2 ? "/" : "", - col3: evaluate.skill_level == 3 ? "/" : "", - col4: evaluate.skill_level == 4 ? "/" : "", - col5: evaluate.skill_level == 5 ? "/" : "", - }, - competency_level: { - col1: evaluate.competency_level == 1 ? "/" : "", - col2: evaluate.competency_level == 2 ? "/" : "", - col3: evaluate.competency_level == 3 ? "/" : "", - col4: evaluate.competency_level == 4 ? "/" : "", - col5: evaluate.competency_level == 5 ? "/" : "", - }, - learn_level: { - col1: evaluate.learn_level == 1 ? "/" : "", - col2: evaluate.learn_level == 2 ? "/" : "", - col3: evaluate.learn_level == 3 ? "/" : "", - col4: evaluate.learn_level == 4 ? "/" : "", - col5: evaluate.learn_level == 5 ? "/" : "", - }, - apply_level: { - col1: evaluate.apply_level == 1 ? "/" : "", - col2: evaluate.apply_level == 2 ? "/" : "", - col3: evaluate.apply_level == 3 ? "/" : "", - col4: evaluate.apply_level == 4 ? "/" : "", - col5: evaluate.apply_level == 5 ? "/" : "", - }, - achievement_other_desc: evaluate.achievement_other_desc, - achievement_other_level: - evaluate.achievement_other_level != null - ? { - col1: evaluate.achievement_other_level == 1 ? "/" : "", - col2: evaluate.achievement_other_level == 2 ? "/" : "", - col3: evaluate.achievement_other_level == 3 ? "/" : "", - col4: evaluate.achievement_other_level == 4 ? "/" : "", - col5: evaluate.achievement_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - achievement_strength_desc: evaluate.achievement_strength_desc, - achievement_improve_desc: evaluate.achievement_improve_desc, - conduct1_level: { - col1: evaluate.conduct1_level == 1 ? "/" : "", - col2: evaluate.conduct1_level == 2 ? "/" : "", - col3: evaluate.conduct1_level == 3 ? "/" : "", - col4: evaluate.conduct1_level == 4 ? "/" : "", - col5: evaluate.conduct1_level == 5 ? "/" : "", - }, - conduct2_level: { - col1: evaluate.conduct2_level == 1 ? "/" : "", - col2: evaluate.conduct2_level == 2 ? "/" : "", - col3: evaluate.conduct2_level == 3 ? "/" : "", - col4: evaluate.conduct2_level == 4 ? "/" : "", - col5: evaluate.conduct2_level == 5 ? "/" : "", - }, - conduct3_level: { - col1: evaluate.conduct3_level == 1 ? "/" : "", - col2: evaluate.conduct3_level == 2 ? "/" : "", - col3: evaluate.conduct3_level == 3 ? "/" : "", - col4: evaluate.conduct3_level == 4 ? "/" : "", - col5: evaluate.conduct3_level == 5 ? "/" : "", - }, - conduct4_level: { - col1: evaluate.conduct4_level == 1 ? "/" : "", - col2: evaluate.conduct4_level == 2 ? "/" : "", - col3: evaluate.conduct4_level == 3 ? "/" : "", - col4: evaluate.conduct4_level == 4 ? "/" : "", - col5: evaluate.conduct4_level == 5 ? "/" : "", - }, - moral1_level: { - col1: evaluate.moral1_level == 1 ? "/" : "", - col2: evaluate.moral1_level == 2 ? "/" : "", - col3: evaluate.moral1_level == 3 ? "/" : "", - col4: evaluate.moral1_level == 4 ? "/" : "", - col5: evaluate.moral1_level == 5 ? "/" : "", - }, - moral2_level: { - col1: evaluate.moral2_level == 1 ? "/" : "", - col2: evaluate.moral2_level == 2 ? "/" : "", - col3: evaluate.moral2_level == 3 ? "/" : "", - col4: evaluate.moral2_level == 4 ? "/" : "", - col5: evaluate.moral2_level == 5 ? "/" : "", - }, - moral3_level: { - col1: evaluate.moral3_level == 1 ? "/" : "", - col2: evaluate.moral3_level == 2 ? "/" : "", - col3: evaluate.moral3_level == 3 ? "/" : "", - col4: evaluate.moral3_level == 4 ? "/" : "", - col5: evaluate.moral3_level == 5 ? "/" : "", - }, - discipline1_level: { - col1: evaluate.discipline1_level == 1 ? "/" : "", - col2: evaluate.discipline1_level == 2 ? "/" : "", - col3: evaluate.discipline1_level == 3 ? "/" : "", - col4: evaluate.discipline1_level == 4 ? "/" : "", - col5: evaluate.discipline1_level == 5 ? "/" : "", - }, - discipline2_level: { - col1: evaluate.discipline2_level == 1 ? "/" : "", - col2: evaluate.discipline2_level == 2 ? "/" : "", - col3: evaluate.discipline2_level == 3 ? "/" : "", - col4: evaluate.discipline2_level == 4 ? "/" : "", - col5: evaluate.discipline2_level == 5 ? "/" : "", - }, - discipline3_level: { - col1: evaluate.discipline3_level == 1 ? "/" : "", - col2: evaluate.discipline3_level == 2 ? "/" : "", - col3: evaluate.discipline3_level == 3 ? "/" : "", - col4: evaluate.discipline3_level == 4 ? "/" : "", - col5: evaluate.discipline3_level == 5 ? "/" : "", - }, - discipline4_level: { - col1: evaluate.discipline4_level == 1 ? "/" : "", - col2: evaluate.discipline4_level == 2 ? "/" : "", - col3: evaluate.discipline4_level == 3 ? "/" : "", - col4: evaluate.discipline4_level == 4 ? "/" : "", - col5: evaluate.discipline4_level == 5 ? "/" : "", - }, - discipline5_level: { - col1: evaluate.discipline5_level == 1 ? "/" : "", - col2: evaluate.discipline5_level == 2 ? "/" : "", - col3: evaluate.discipline5_level == 3 ? "/" : "", - col4: evaluate.discipline5_level == 4 ? "/" : "", - col5: evaluate.discipline5_level == 5 ? "/" : "", - }, - behavior_other_desc: evaluate.behavior_other_desc, - behavior_other_level: - evaluate.behavior_other_level != null - ? { - col1: evaluate.behavior_other_level == 1 ? "/" : "", - col2: evaluate.behavior_other_level == 2 ? "/" : "", - col3: evaluate.behavior_other_level == 3 ? "/" : "", - col4: evaluate.behavior_other_level == 4 ? "/" : "", - col5: evaluate.behavior_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - - behavior_strength_desc: evaluate.behavior_strength_desc, - behavior_improve_desc: evaluate.behavior_improve_desc, - orientation: evaluate.orientation, - self_learning: evaluate.self_learning, - training_seminar: evaluate.training_seminar, - other_training: evaluate.other_training, - createdAt: evaluate.createdAt, - updatedAt: evaluate.updatedAt, - achievements: achievement, - role: director.role, - }; - - const assign = await AppDataSource.getRepository(Assign).findOne({ - select: ["id", "personal_id", "round_no", "date_start", "date_finish"], - where: { id: evaluate.assign_id }, - }); - - if (!assign) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimenteeData = await this.personalRepository.findOne({ - where: { - personal_id: assign.personal_id, - }, - }); - - if (!experimenteeData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimentee = await { - ...experimenteeData, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: "-", - OrganizationOrganization: experimenteeData.orgRootName, - Oc: experimenteeData.organization, - }; - - const data = await { - experimentee: experimentee ? experimentee : null, - director: director ? director : null, - assign, - evaluate: evaluateData, - }; - return new HttpSuccess(data); - } - - /** - * API แสดงข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) ตาม id - * - * @summary ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) ตาม id - * - */ - @Get("evaluate-commander") - async GetDataEvaluateCommander( - @Query() id: string, - @Request() request: RequestWithUser - ) { - const evaluate = await this.evaluateCommanderRepository.findOne({ - where: { id }, - }); - - if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const evaluateData = await { - id: evaluate.id, - no: evaluate.no, - date_start: evaluate.date_start, - date_finish: evaluate.date_finish, - sign_dated: evaluate.commander_dated, - knowledge_level: { - col1: evaluate.knowledge_level == 1 ? "/" : "", - col2: evaluate.knowledge_level == 2 ? "/" : "", - col3: evaluate.knowledge_level == 3 ? "/" : "", - col4: evaluate.knowledge_level == 4 ? "/" : "", - col5: evaluate.knowledge_level == 5 ? "/" : "", - }, - skill_level: { - col1: evaluate.skill_level == 1 ? "/" : "", - col2: evaluate.skill_level == 2 ? "/" : "", - col3: evaluate.skill_level == 3 ? "/" : "", - col4: evaluate.skill_level == 4 ? "/" : "", - col5: evaluate.skill_level == 5 ? "/" : "", - }, - competency_level: { - col1: evaluate.competency_level == 1 ? "/" : "", - col2: evaluate.competency_level == 2 ? "/" : "", - col3: evaluate.competency_level == 3 ? "/" : "", - col4: evaluate.competency_level == 4 ? "/" : "", - col5: evaluate.competency_level == 5 ? "/" : "", - }, - learn_level: { - col1: evaluate.learn_level == 1 ? "/" : "", - col2: evaluate.learn_level == 2 ? "/" : "", - col3: evaluate.learn_level == 3 ? "/" : "", - col4: evaluate.learn_level == 4 ? "/" : "", - col5: evaluate.learn_level == 5 ? "/" : "", - }, - apply_level: { - col1: evaluate.apply_level == 1 ? "/" : "", - col2: evaluate.apply_level == 2 ? "/" : "", - col3: evaluate.apply_level == 3 ? "/" : "", - col4: evaluate.apply_level == 4 ? "/" : "", - col5: evaluate.apply_level == 5 ? "/" : "", - }, - success_level: { - col1: evaluate.success_level == 1 ? "/" : "", - col2: evaluate.success_level == 2 ? "/" : "", - col3: evaluate.success_level == 3 ? "/" : "", - col4: evaluate.success_level == 4 ? "/" : "", - col5: evaluate.success_level == 5 ? "/" : "", - }, - achievement_other_desc: evaluate.achievement_other_desc, - achievement_other_level: - evaluate.achievement_other_level != null - ? { - col1: evaluate.achievement_other_level == 1 ? "/" : "", - col2: evaluate.achievement_other_level == 2 ? "/" : "", - col3: evaluate.achievement_other_level == 3 ? "/" : "", - col4: evaluate.achievement_other_level == 4 ? "/" : "", - col5: evaluate.achievement_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - conduct1_level: { - col1: evaluate.conduct1_level == 1 ? "/" : "", - col2: evaluate.conduct1_level == 2 ? "/" : "", - col3: evaluate.conduct1_level == 3 ? "/" : "", - col4: evaluate.conduct1_level == 4 ? "/" : "", - col5: evaluate.conduct1_level == 5 ? "/" : "", - }, - conduct2_level: { - col1: evaluate.conduct2_level == 1 ? "/" : "", - col2: evaluate.conduct2_level == 2 ? "/" : "", - col3: evaluate.conduct2_level == 3 ? "/" : "", - col4: evaluate.conduct2_level == 4 ? "/" : "", - col5: evaluate.conduct2_level == 5 ? "/" : "", - }, - conduct3_level: { - col1: evaluate.conduct3_level == 1 ? "/" : "", - col2: evaluate.conduct3_level == 2 ? "/" : "", - col3: evaluate.conduct3_level == 3 ? "/" : "", - col4: evaluate.conduct3_level == 4 ? "/" : "", - col5: evaluate.conduct3_level == 5 ? "/" : "", - }, - conduct4_level: { - col1: evaluate.conduct4_level == 1 ? "/" : "", - col2: evaluate.conduct4_level == 2 ? "/" : "", - col3: evaluate.conduct4_level == 3 ? "/" : "", - col4: evaluate.conduct4_level == 4 ? "/" : "", - col5: evaluate.conduct4_level == 5 ? "/" : "", - }, - moral1_level: { - col1: evaluate.moral1_level == 1 ? "/" : "", - col2: evaluate.moral1_level == 2 ? "/" : "", - col3: evaluate.moral1_level == 3 ? "/" : "", - col4: evaluate.moral1_level == 4 ? "/" : "", - col5: evaluate.moral1_level == 5 ? "/" : "", - }, - moral2_level: { - col1: evaluate.moral2_level == 1 ? "/" : "", - col2: evaluate.moral2_level == 2 ? "/" : "", - col3: evaluate.moral2_level == 3 ? "/" : "", - col4: evaluate.moral2_level == 4 ? "/" : "", - col5: evaluate.moral2_level == 5 ? "/" : "", - }, - moral3_level: { - col1: evaluate.moral3_level == 1 ? "/" : "", - col2: evaluate.moral3_level == 2 ? "/" : "", - col3: evaluate.moral3_level == 3 ? "/" : "", - col4: evaluate.moral3_level == 4 ? "/" : "", - col5: evaluate.moral3_level == 5 ? "/" : "", - }, - discipline1_level: { - col1: evaluate.discipline1_level == 1 ? "/" : "", - col2: evaluate.discipline1_level == 2 ? "/" : "", - col3: evaluate.discipline1_level == 3 ? "/" : "", - col4: evaluate.discipline1_level == 4 ? "/" : "", - col5: evaluate.discipline1_level == 5 ? "/" : "", - }, - discipline2_level: { - col1: evaluate.discipline2_level == 1 ? "/" : "", - col2: evaluate.discipline2_level == 2 ? "/" : "", - col3: evaluate.discipline2_level == 3 ? "/" : "", - col4: evaluate.discipline2_level == 4 ? "/" : "", - col5: evaluate.discipline2_level == 5 ? "/" : "", - }, - discipline3_level: { - col1: evaluate.discipline3_level == 1 ? "/" : "", - col2: evaluate.discipline3_level == 2 ? "/" : "", - col3: evaluate.discipline3_level == 3 ? "/" : "", - col4: evaluate.discipline3_level == 4 ? "/" : "", - col5: evaluate.discipline3_level == 5 ? "/" : "", - }, - discipline4_level: { - col1: evaluate.discipline4_level == 1 ? "/" : "", - col2: evaluate.discipline4_level == 2 ? "/" : "", - col3: evaluate.discipline4_level == 3 ? "/" : "", - col4: evaluate.discipline4_level == 4 ? "/" : "", - col5: evaluate.discipline4_level == 5 ? "/" : "", - }, - discipline5_level: { - col1: evaluate.discipline5_level == 1 ? "/" : "", - col2: evaluate.discipline5_level == 2 ? "/" : "", - col3: evaluate.discipline5_level == 3 ? "/" : "", - col4: evaluate.discipline5_level == 4 ? "/" : "", - col5: evaluate.discipline5_level == 5 ? "/" : "", - }, - behavior_other_desc: evaluate.behavior_other_desc, - behavior_other_level: - evaluate.behavior_other_level != null - ? { - col1: evaluate.behavior_other_level == 1 ? "/" : "", - col2: evaluate.behavior_other_level == 2 ? "/" : "", - col3: evaluate.behavior_other_level == 3 ? "/" : "", - col4: evaluate.behavior_other_level == 4 ? "/" : "", - col5: evaluate.behavior_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - behavior_strength_desc: evaluate.behavior_strength_desc, - behavior_improve_desc: evaluate.behavior_improve_desc, - orientation: evaluate.orientation, - self_learning: evaluate.self_learning, - training_seminar: evaluate.training_seminar, - other_training: evaluate.other_training, - createdAt: evaluate.createdAt, - updatedAt: evaluate.updatedAt, - }; - - const assign = await AppDataSource.getRepository(Assign).findOne({ - select: ["id", "personal_id", "round_no", "date_start", "date_finish"], - where: { id: evaluate.assign_id }, - }); - - if (!assign) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimenteeData = await this.personalRepository.findOne({ - where: { - personal_id: assign.personal_id, - }, - }); - - if (!experimenteeData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimentee = await { - ...experimenteeData, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: "-", - OrganizationOrganization: experimenteeData.orgRootName, - Oc: experimenteeData.organization, - }; - - const commanderData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "fullname", - "position", - "position", - "posType", - "posLevel", - "role", - "dated", - ], - where: { personal_id: evaluate.director_id }, - }); - - if (!commanderData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const commander = await { - ...commanderData, - name: commanderData.fullname, - Position: commanderData.position, - }; - - return new HttpSuccess({ - experimentee: experimentee ? experimentee : null, - commander: commander ? commander : null, - assign, - evaluate: evaluateData, - }); - } - - /** - * API แสดงข้อมูลแบบประเมินผล (คณะกรรมการ) ตาม id - * - * @summary ข้อมูลแบบประเมินผล (คณะกรรมการ) ตาม id - * - */ - @Get("evaluate-chairman") - async GetDataEvaluateChairman( - @Query() id: string, - @Request() request: RequestWithUser - ) { - const evaluate = await this.evaluateChairmanRepository.findOne({ - where: { id }, - }); - - if (!evaluate) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const develop_total_score = await (Number( - evaluate.develop_orientation_score - ) + - Number(evaluate.develop_self_learning_score) + - Number(evaluate.develop_training_seminar_score) + - Number(evaluate.develop_other_training_score)); - const develop_total_percent = await (Number( - evaluate.develop_orientation_percent - ) + - Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_self_learning_percent) + - Number(evaluate.develop_training_seminar_percent)); - - const evaluateData = await { - id: evaluate.id, - // director_id: evaluate.director_id, - // assign_id: evaluate.assign_id, - no: evaluate.no, - date_start: evaluate.date_start, - date_finish: evaluate.date_finish, - chairman_dated: evaluate.chairman_dated, - director1_dated: evaluate.director1_dated, - director2_dated: evaluate.director2_dated, - knowledge_level: { - col1: evaluate.knowledge_level == 1 ? "/" : "", - col2: evaluate.knowledge_level == 2 ? "/" : "", - col3: evaluate.knowledge_level == 3 ? "/" : "", - col4: evaluate.knowledge_level == 4 ? "/" : "", - col5: evaluate.knowledge_level == 5 ? "/" : "", - }, - apply_level: { - col1: evaluate.apply_level == 1 ? "/" : "", - col2: evaluate.apply_level == 2 ? "/" : "", - col3: evaluate.apply_level == 3 ? "/" : "", - col4: evaluate.apply_level == 4 ? "/" : "", - col5: evaluate.apply_level == 5 ? "/" : "", - }, - success_level: { - col1: evaluate.success_level == 1 ? "/" : "", - col2: evaluate.success_level == 2 ? "/" : "", - col3: evaluate.success_level == 3 ? "/" : "", - col4: evaluate.success_level == 4 ? "/" : "", - col5: evaluate.success_level == 5 ? "/" : "", - }, - achievement_other_desc: evaluate.achievement_other_desc, - achievement_other_level: - evaluate.achievement_other_level != null - ? { - col1: evaluate.achievement_other_level == 1 ? "/" : "", - col2: evaluate.achievement_other_level == 2 ? "/" : "", - col3: evaluate.achievement_other_level == 3 ? "/" : "", - col4: evaluate.achievement_other_level == 4 ? "/" : "", - col5: evaluate.achievement_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - conduct1_level: { - col1: evaluate.conduct1_level == 1 ? "/" : "", - col2: evaluate.conduct1_level == 2 ? "/" : "", - col3: evaluate.conduct1_level == 3 ? "/" : "", - col4: evaluate.conduct1_level == 4 ? "/" : "", - col5: evaluate.conduct1_level == 5 ? "/" : "", - }, - conduct2_level: { - col1: evaluate.conduct2_level == 1 ? "/" : "", - col2: evaluate.conduct2_level == 2 ? "/" : "", - col3: evaluate.conduct2_level == 3 ? "/" : "", - col4: evaluate.conduct2_level == 4 ? "/" : "", - col5: evaluate.conduct2_level == 5 ? "/" : "", - }, - conduct3_level: { - col1: evaluate.conduct3_level == 1 ? "/" : "", - col2: evaluate.conduct3_level == 2 ? "/" : "", - col3: evaluate.conduct3_level == 3 ? "/" : "", - col4: evaluate.conduct3_level == 4 ? "/" : "", - col5: evaluate.conduct3_level == 5 ? "/" : "", - }, - conduct4_level: { - col1: evaluate.conduct4_level == 1 ? "/" : "", - col2: evaluate.conduct4_level == 2 ? "/" : "", - col3: evaluate.conduct4_level == 3 ? "/" : "", - col4: evaluate.conduct4_level == 4 ? "/" : "", - col5: evaluate.conduct4_level == 5 ? "/" : "", - }, - moral1_level: { - col1: evaluate.moral1_level == 1 ? "/" : "", - col2: evaluate.moral1_level == 2 ? "/" : "", - col3: evaluate.moral1_level == 3 ? "/" : "", - col4: evaluate.moral1_level == 4 ? "/" : "", - col5: evaluate.moral1_level == 5 ? "/" : "", - }, - moral2_level: { - col1: evaluate.moral2_level == 1 ? "/" : "", - col2: evaluate.moral2_level == 2 ? "/" : "", - col3: evaluate.moral2_level == 3 ? "/" : "", - col4: evaluate.moral2_level == 4 ? "/" : "", - col5: evaluate.moral2_level == 5 ? "/" : "", - }, - moral3_level: { - col1: evaluate.moral3_level == 1 ? "/" : "", - col2: evaluate.moral3_level == 2 ? "/" : "", - col3: evaluate.moral3_level == 3 ? "/" : "", - col4: evaluate.moral3_level == 4 ? "/" : "", - col5: evaluate.moral3_level == 5 ? "/" : "", - }, - discipline1_level: { - col1: evaluate.discipline1_level == 1 ? "/" : "", - col2: evaluate.discipline1_level == 2 ? "/" : "", - col3: evaluate.discipline1_level == 3 ? "/" : "", - col4: evaluate.discipline1_level == 4 ? "/" : "", - col5: evaluate.discipline1_level == 5 ? "/" : "", - }, - discipline2_level: { - col1: evaluate.discipline2_level == 1 ? "/" : "", - col2: evaluate.discipline2_level == 2 ? "/" : "", - col3: evaluate.discipline2_level == 3 ? "/" : "", - col4: evaluate.discipline2_level == 4 ? "/" : "", - col5: evaluate.discipline2_level == 5 ? "/" : "", - }, - discipline3_level: { - col1: evaluate.discipline3_level == 1 ? "/" : "", - col2: evaluate.discipline3_level == 2 ? "/" : "", - col3: evaluate.discipline3_level == 3 ? "/" : "", - col4: evaluate.discipline3_level == 4 ? "/" : "", - col5: evaluate.discipline3_level == 5 ? "/" : "", - }, - discipline4_level: { - col1: evaluate.discipline4_level == 1 ? "/" : "", - col2: evaluate.discipline4_level == 2 ? "/" : "", - col3: evaluate.discipline4_level == 3 ? "/" : "", - col4: evaluate.discipline4_level == 4 ? "/" : "", - col5: evaluate.discipline4_level == 5 ? "/" : "", - }, - discipline5_level: { - col1: evaluate.discipline5_level == 1 ? "/" : "", - col2: evaluate.discipline5_level == 2 ? "/" : "", - col3: evaluate.discipline5_level == 3 ? "/" : "", - col4: evaluate.discipline5_level == 4 ? "/" : "", - col5: evaluate.discipline5_level == 5 ? "/" : "", - }, - behavior_other_desc: evaluate.behavior_other_desc, - behavior_other_level: - evaluate.behavior_other_level != null - ? { - col1: evaluate.behavior_other_level == 1 ? "/" : "", - col2: evaluate.behavior_other_level == 2 ? "/" : "", - col3: evaluate.behavior_other_level == 3 ? "/" : "", - col4: evaluate.behavior_other_level == 4 ? "/" : "", - col5: evaluate.behavior_other_level == 5 ? "/" : "", - } - : { - col1: "", - col2: "", - col3: "", - col4: "", - col5: "", - }, - - achievement_score: evaluate.achievement_score, - achievement_score_total: evaluate.achievement_score_total, - achievement_percent: evaluate.achievement_percent, - achievement_result: evaluate.achievement_result, - behavior_score: evaluate.behavior_score, - behavior_score_total: evaluate.behavior_score_total, - behavior_percent: evaluate.behavior_percent, - behavior_result: evaluate.behavior_result, - sum_score: evaluate.sum_score, - sum_percent: evaluate.sum_percent, - - develop_orientation_score: evaluate.develop_orientation_score, - develop_self_learning_score: evaluate.develop_self_learning_score, - develop_training_seminar_score: evaluate.develop_training_seminar_score, - develop_other_training_score: evaluate.develop_other_training_score, - develop_total_score: develop_total_score, - develop_orientation_percent: evaluate.develop_orientation_percent, - develop_self_learning_percent: evaluate.develop_self_learning_percent, - develop_training_seminar_percent: - evaluate.develop_training_seminar_percent, - develop_other_training_percent: evaluate.develop_other_training_percent, - develop_total_percent: develop_total_percent, - develop_result: evaluate.develop_result, - evaluate_result: evaluate.evaluate_result, - createdAt: evaluate.createdAt, - updatedAt: evaluate.updatedAt, - }; - - const assign = await AppDataSource.getRepository(Assign).findOne({ - select: ["id", "personal_id", "round_no", "date_start", "date_finish"], - where: { id: evaluate.assign_id }, - }); - - if (!assign) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimenteeData = await this.personalRepository.findOne({ - where: { - personal_id: assign.personal_id, - }, - }); - - if (!experimenteeData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const experimentee = await { - ...experimenteeData, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: "-", - OrganizationOrganization: experimenteeData.orgRootName, - Oc: experimenteeData.organization, - }; - - const directorData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "fullname", - "position", - "posType", - "posLevel", - "role", - "dated", - ], - where: { assign_id: assign.id }, - }); - - if (!directorData) { - return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - const director = await Promise.all( - directorData.map(async (element) => { - return { - ...element, - name: element.fullname, - Position: element.position, - }; - }) - ); - - const mentorData = await (director.find((x) => x.role == "mentor") ?? null); - const mentor = mentorData != null ? mentorData : null; - - const commanderData = await (director.find((x) => x.role == "commander") ?? - null); - const commander = commanderData != null ? commanderData : null; - - const chairmanData = await (director.find((x) => x.role == "chairman") ?? - null); - const chairman = chairmanData != null ? chairmanData : null; - - return new HttpSuccess({ - experimentee: experimentee ? experimentee : null, - chairman: chairman ? chairman : null, - director1: commander ? commander : null, - director2: mentor ? mentor : null, - assign, - evaluate: evaluateData, - }); - } + private evaluateChairmanRepository = AppDataSource.getRepository(EvaluateChairman) + private evaluateResultRepository = AppDataSource.getRepository(EvaluateResult) + private personalRepository = AppDataSource.getRepository(Personal) + private evaluateAssessorRepository = AppDataSource.getRepository(EvaluateAssessor) + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector) + private evaluateAchievementRepository = AppDataSource.getRepository(EvaluateAchievement) + private evaluateCommanderRepository = AppDataSource.getRepository(EvaluateCommander) + + /** + * API สำหรับออกรายงาน + * + * @summary ผลการทดลองปฏิบัติราชการ + * + */ + @Get("") + async GetReport(@Query() assign_id: string) { + const evaluate = await this.evaluateChairmanRepository.findOne({ + where: { assign_id }, + }) + + const result = await this.evaluateResultRepository.findOne({ + where: { assign_id }, + }) + + if (!evaluate || !result) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ") + } + + const develop_total_score = await (Number(evaluate.develop_orientation_score) + + Number(evaluate.develop_self_learning_score) + + Number(evaluate.develop_training_seminar_score) + + Number(evaluate.develop_other_training_score)) + const develop_total_percent = await (Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_self_learning_percent) + + Number(evaluate.develop_training_seminar_percent)) + + const data = await { + develop_orientation_score: evaluate.develop_orientation_score, + develop_self_learning_score: evaluate.develop_self_learning_score, + develop_training_seminar_score: evaluate.develop_training_seminar_score, + develop_other_training_score: evaluate.develop_other_training_score, + develop_total_score, + develop_orientation_percent: evaluate.develop_orientation_percent, + develop_self_learning_percent: evaluate.develop_self_learning_percent, + develop_training_seminar_percent: evaluate.develop_training_seminar_percent, + develop_other_training_percent: evaluate.develop_other_training_percent, + develop_total_percent, + develop_result: evaluate.develop_result, + achievement_score: evaluate.achievement_score, + achievement_score_total: evaluate.achievement_score_total, + achievement_percent: evaluate.achievement_percent, + achievement_result: evaluate.achievement_result, + behavior_score: evaluate.behavior_score, + behavior_score_total: evaluate.behavior_score_total, + behavior_percent: evaluate.behavior_percent, + behavior_result: evaluate.behavior_result, + sum_score: evaluate.sum_score, + sum_percent: evaluate.sum_percent, + reason: result.reson, + pass_result: result.pass_result, + evaluate_date: result.chairman_dated, + } + + return new HttpSuccess(data) + } + + /** + * API แสดงรายการผู้ผ่านทดลองงาน + * + * @summary รายการผู้ผ่านทดลองงาน + * + */ + @Get("pass") + async GetPass() { + const lists = await this.personalRepository.find({ + where: { probation_status: 2 }, + }) + + let data: DataPass[] = [] + await Promise.all( + lists.map(async list => { + const assign = await AppDataSource.getRepository(Assign).findOne({ + select: ["date_start", "date_finish"], + where: { personal_id: list.personal_id }, + }) + + if (assign) + data.push({ + person: { + id: list.personal_id, + name: `${list.prefixName}${list.firstName} ${list.lastName}`, + }, + assign, + }) + }) + ) + + return new HttpSuccess(data) + } + + /** + * API แสดงรายการผู้ไม่ผ่านทดลองงาน + * + * @summary รายการคนไม่ผ่านการทดลองปฏิบัติราชการและรอไปออกคำสั่ง + * + */ + @Get("not-pass") + async GetDataNotPass() { + const lists = await this.personalRepository.find({ + where: { probation_status: 3 }, + }) + + let data: DataPass[] = [] + await Promise.all( + lists.map(async list => { + const assign = await AppDataSource.getRepository(Assign).findOne({ + select: ["date_start", "date_finish"], + where: { personal_id: list.personal_id }, + }) + + if (assign) + data.push({ + person: { + id: list.personal_id, + name: `${list.prefixName}${list.firstName} ${list.lastName}`, + }, + assign, + }) + }) + ) + + return new HttpSuccess(data) + } + + /** + * API แสดงรายการคนที่ถูกขยายระยะเวลาทดลองงาน + * + * @summary รายการคนที่ถูกขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการและรอไปออกคำสั่ง + * + */ + @Get("expand") + async GetDataExpand() { + const data = await this.personalRepository.find({ + select: ["personal_id"], + where: { probation_status: 7 }, + }) + + return new HttpSuccess(data) + } + + /** + * API สำหรับปรับสถานะการดึงไปออกคำสั่ง + * + * @summary ปรับสถานะการดึงไปออกคำสั่ง + * + */ + @Put("status") + async UpdateStatus(@Query() personal_id: string, @Body() requestBody: { command_no: string }, @Request() request: RequestWithUser) { + const personal = await this.personalRepository.findOne({ + where: { personal_id }, + }) + const before = personal + + if (!personal) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") + } + + personal.order_number = requestBody.command_no + personal.probation_status = 8 + personal.updateFullName = request.user.name + personal.updateUserId = request.user.sub + + this.personalRepository.save(personal, { data: request }) + setLogDataDiff(request, { before, after: personal }) + + const resultText = (await personal.probation_status) === 2 ? "ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ" : "ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ" + + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", + body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ ${resultText}`, + receiverUserId: personal_id, + payload: "", + isSendMail: false, + isSendInbox: true, + isSendNotification: true, + }) + .catch(error => { + console.error("Error calling API:", error) + }) + + return new HttpSuccess() + } + + /** + * API สำหรับปรับสถานะการดึงไปออกคำสั่ง + * + * @summary ปรับสถานะการดึงไปออกคำสั่ง + * + */ + @Put("change-status") + async ChangeStatus(@Query() personal_id: string, @Body() reqBody: { status: number }, @Request() request: RequestWithUser) { + const personal = await this.personalRepository.findOne({ + where: { personal_id }, + }) + const before = personal + + if (!personal) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") + } + + personal.probation_status = await reqBody.status + personal.updateFullName = request.user.name + personal.updateUserId = request.user.sub + + await this.personalRepository.save(personal, { data: request }) + setLogDataDiff(request, { before, after: personal }) + + return new HttpSuccess() + } + + /** + * API แสดงข้อมูลแบบบันทึกผลตาม id + * + * @summary ข้อมูลแบบบันทึกผลตาม id + * + */ + @Get("form-record") + async GetDataFormRecord(@Query() id: string) { + const evaluate = await this.evaluateAssessorRepository.findOne({ + where: { id }, + }) + + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const directorData = await this.assignDirectorRepository.findOne({ + select: ["personal_id", "fullname", "position", "posType", "posLevel", "role", "dated"], + where: { personal_id: evaluate.director_id }, + }) + + if (!directorData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const director = await { + ...directorData, + name: directorData.fullname, + position: directorData.position, + } + + const achievements = await this.evaluateAchievementRepository.find({ + select: ["evaluate_expect_level", "evaluate_output_level"], + where: { evaluate_id: evaluate.id }, + }) + + if (!achievements) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + let achievement: any = [] + await Promise.all( + achievements.map(async element => { + const evaluate_expect_level = await { + col1: element.evaluate_expect_level == 1 ? "/" : "", + col2: element.evaluate_expect_level == 2 ? "/" : "", + col3: element.evaluate_expect_level == 3 ? "/" : "", + col4: element.evaluate_expect_level == 4 ? "/" : "", + col5: element.evaluate_expect_level == 5 ? "/" : "", + } + + const evaluate_output_level = await { + col1: element.evaluate_output_level == 1 ? "/" : "", + col2: element.evaluate_output_level == 2 ? "/" : "", + col3: element.evaluate_output_level == 3 ? "/" : "", + col4: element.evaluate_output_level == 4 ? "/" : "", + col5: element.evaluate_output_level == 5 ? "/" : "", + } + + achievement.push({ + ...element, + evaluate_expect_level, + evaluate_output_level, + }) + }) + ) + + const evaluateData = await { + id: evaluate.id, + no: evaluate.no, + date_start: evaluate.date_start, + date_finish: evaluate.date_finish, + sign_dated: evaluate.assessor_dated, + knowledge_level: { + col1: evaluate.knowledge_level == 1 ? "/" : "", + col2: evaluate.knowledge_level == 2 ? "/" : "", + col3: evaluate.knowledge_level == 3 ? "/" : "", + col4: evaluate.knowledge_level == 4 ? "/" : "", + col5: evaluate.knowledge_level == 5 ? "/" : "", + }, + skill_level: { + col1: evaluate.skill_level == 1 ? "/" : "", + col2: evaluate.skill_level == 2 ? "/" : "", + col3: evaluate.skill_level == 3 ? "/" : "", + col4: evaluate.skill_level == 4 ? "/" : "", + col5: evaluate.skill_level == 5 ? "/" : "", + }, + competency_level: { + col1: evaluate.competency_level == 1 ? "/" : "", + col2: evaluate.competency_level == 2 ? "/" : "", + col3: evaluate.competency_level == 3 ? "/" : "", + col4: evaluate.competency_level == 4 ? "/" : "", + col5: evaluate.competency_level == 5 ? "/" : "", + }, + learn_level: { + col1: evaluate.learn_level == 1 ? "/" : "", + col2: evaluate.learn_level == 2 ? "/" : "", + col3: evaluate.learn_level == 3 ? "/" : "", + col4: evaluate.learn_level == 4 ? "/" : "", + col5: evaluate.learn_level == 5 ? "/" : "", + }, + apply_level: { + col1: evaluate.apply_level == 1 ? "/" : "", + col2: evaluate.apply_level == 2 ? "/" : "", + col3: evaluate.apply_level == 3 ? "/" : "", + col4: evaluate.apply_level == 4 ? "/" : "", + col5: evaluate.apply_level == 5 ? "/" : "", + }, + achievement_other_desc: evaluate.achievement_other_desc, + achievement_other_level: + evaluate.achievement_other_level != null + ? { + col1: evaluate.achievement_other_level == 1 ? "/" : "", + col2: evaluate.achievement_other_level == 2 ? "/" : "", + col3: evaluate.achievement_other_level == 3 ? "/" : "", + col4: evaluate.achievement_other_level == 4 ? "/" : "", + col5: evaluate.achievement_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + achievement_strength_desc: evaluate.achievement_strength_desc, + achievement_improve_desc: evaluate.achievement_improve_desc, + conduct1_level: { + col1: evaluate.conduct1_level == 1 ? "/" : "", + col2: evaluate.conduct1_level == 2 ? "/" : "", + col3: evaluate.conduct1_level == 3 ? "/" : "", + col4: evaluate.conduct1_level == 4 ? "/" : "", + col5: evaluate.conduct1_level == 5 ? "/" : "", + }, + conduct2_level: { + col1: evaluate.conduct2_level == 1 ? "/" : "", + col2: evaluate.conduct2_level == 2 ? "/" : "", + col3: evaluate.conduct2_level == 3 ? "/" : "", + col4: evaluate.conduct2_level == 4 ? "/" : "", + col5: evaluate.conduct2_level == 5 ? "/" : "", + }, + conduct3_level: { + col1: evaluate.conduct3_level == 1 ? "/" : "", + col2: evaluate.conduct3_level == 2 ? "/" : "", + col3: evaluate.conduct3_level == 3 ? "/" : "", + col4: evaluate.conduct3_level == 4 ? "/" : "", + col5: evaluate.conduct3_level == 5 ? "/" : "", + }, + conduct4_level: { + col1: evaluate.conduct4_level == 1 ? "/" : "", + col2: evaluate.conduct4_level == 2 ? "/" : "", + col3: evaluate.conduct4_level == 3 ? "/" : "", + col4: evaluate.conduct4_level == 4 ? "/" : "", + col5: evaluate.conduct4_level == 5 ? "/" : "", + }, + moral1_level: { + col1: evaluate.moral1_level == 1 ? "/" : "", + col2: evaluate.moral1_level == 2 ? "/" : "", + col3: evaluate.moral1_level == 3 ? "/" : "", + col4: evaluate.moral1_level == 4 ? "/" : "", + col5: evaluate.moral1_level == 5 ? "/" : "", + }, + moral2_level: { + col1: evaluate.moral2_level == 1 ? "/" : "", + col2: evaluate.moral2_level == 2 ? "/" : "", + col3: evaluate.moral2_level == 3 ? "/" : "", + col4: evaluate.moral2_level == 4 ? "/" : "", + col5: evaluate.moral2_level == 5 ? "/" : "", + }, + moral3_level: { + col1: evaluate.moral3_level == 1 ? "/" : "", + col2: evaluate.moral3_level == 2 ? "/" : "", + col3: evaluate.moral3_level == 3 ? "/" : "", + col4: evaluate.moral3_level == 4 ? "/" : "", + col5: evaluate.moral3_level == 5 ? "/" : "", + }, + discipline1_level: { + col1: evaluate.discipline1_level == 1 ? "/" : "", + col2: evaluate.discipline1_level == 2 ? "/" : "", + col3: evaluate.discipline1_level == 3 ? "/" : "", + col4: evaluate.discipline1_level == 4 ? "/" : "", + col5: evaluate.discipline1_level == 5 ? "/" : "", + }, + discipline2_level: { + col1: evaluate.discipline2_level == 1 ? "/" : "", + col2: evaluate.discipline2_level == 2 ? "/" : "", + col3: evaluate.discipline2_level == 3 ? "/" : "", + col4: evaluate.discipline2_level == 4 ? "/" : "", + col5: evaluate.discipline2_level == 5 ? "/" : "", + }, + discipline3_level: { + col1: evaluate.discipline3_level == 1 ? "/" : "", + col2: evaluate.discipline3_level == 2 ? "/" : "", + col3: evaluate.discipline3_level == 3 ? "/" : "", + col4: evaluate.discipline3_level == 4 ? "/" : "", + col5: evaluate.discipline3_level == 5 ? "/" : "", + }, + discipline4_level: { + col1: evaluate.discipline4_level == 1 ? "/" : "", + col2: evaluate.discipline4_level == 2 ? "/" : "", + col3: evaluate.discipline4_level == 3 ? "/" : "", + col4: evaluate.discipline4_level == 4 ? "/" : "", + col5: evaluate.discipline4_level == 5 ? "/" : "", + }, + discipline5_level: { + col1: evaluate.discipline5_level == 1 ? "/" : "", + col2: evaluate.discipline5_level == 2 ? "/" : "", + col3: evaluate.discipline5_level == 3 ? "/" : "", + col4: evaluate.discipline5_level == 4 ? "/" : "", + col5: evaluate.discipline5_level == 5 ? "/" : "", + }, + behavior_other_desc: evaluate.behavior_other_desc, + behavior_other_level: + evaluate.behavior_other_level != null + ? { + col1: evaluate.behavior_other_level == 1 ? "/" : "", + col2: evaluate.behavior_other_level == 2 ? "/" : "", + col3: evaluate.behavior_other_level == 3 ? "/" : "", + col4: evaluate.behavior_other_level == 4 ? "/" : "", + col5: evaluate.behavior_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + + behavior_strength_desc: evaluate.behavior_strength_desc, + behavior_improve_desc: evaluate.behavior_improve_desc, + orientation: evaluate.orientation, + self_learning: evaluate.self_learning, + training_seminar: evaluate.training_seminar, + other_training: evaluate.other_training, + createdAt: evaluate.createdAt, + updatedAt: evaluate.updatedAt, + achievements: achievement, + role: director.role, + } + + const assign = await AppDataSource.getRepository(Assign).findOne({ + select: ["id", "personal_id", "round_no", "date_start", "date_finish"], + where: { id: evaluate.assign_id }, + }) + + if (!assign) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimenteeData = await this.personalRepository.findOne({ + where: { + personal_id: assign.personal_id, + }, + }) + + if (!experimenteeData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimentee = await { + ...experimenteeData, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: "-", + OrganizationOrganization: experimenteeData.orgRootName, + Oc: experimenteeData.organization, + } + + const data = await { + experimentee: experimentee ? experimentee : null, + director: director ? director : null, + assign, + evaluate: evaluateData, + } + return new HttpSuccess(data) + } + + /** + * API แสดงข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) ตาม id + * + * @summary ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) ตาม id + * + */ + @Get("evaluate-commander") + async GetDataEvaluateCommander(@Query() id: string, @Request() request: RequestWithUser) { + const evaluate = await this.evaluateCommanderRepository.findOne({ + where: { id }, + }) + + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const evaluateData = await { + id: evaluate.id, + no: evaluate.no, + date_start: evaluate.date_start, + date_finish: evaluate.date_finish, + sign_dated: evaluate.commander_dated, + knowledge_level: { + col1: evaluate.knowledge_level == 1 ? "/" : "", + col2: evaluate.knowledge_level == 2 ? "/" : "", + col3: evaluate.knowledge_level == 3 ? "/" : "", + col4: evaluate.knowledge_level == 4 ? "/" : "", + col5: evaluate.knowledge_level == 5 ? "/" : "", + }, + skill_level: { + col1: evaluate.skill_level == 1 ? "/" : "", + col2: evaluate.skill_level == 2 ? "/" : "", + col3: evaluate.skill_level == 3 ? "/" : "", + col4: evaluate.skill_level == 4 ? "/" : "", + col5: evaluate.skill_level == 5 ? "/" : "", + }, + competency_level: { + col1: evaluate.competency_level == 1 ? "/" : "", + col2: evaluate.competency_level == 2 ? "/" : "", + col3: evaluate.competency_level == 3 ? "/" : "", + col4: evaluate.competency_level == 4 ? "/" : "", + col5: evaluate.competency_level == 5 ? "/" : "", + }, + learn_level: { + col1: evaluate.learn_level == 1 ? "/" : "", + col2: evaluate.learn_level == 2 ? "/" : "", + col3: evaluate.learn_level == 3 ? "/" : "", + col4: evaluate.learn_level == 4 ? "/" : "", + col5: evaluate.learn_level == 5 ? "/" : "", + }, + apply_level: { + col1: evaluate.apply_level == 1 ? "/" : "", + col2: evaluate.apply_level == 2 ? "/" : "", + col3: evaluate.apply_level == 3 ? "/" : "", + col4: evaluate.apply_level == 4 ? "/" : "", + col5: evaluate.apply_level == 5 ? "/" : "", + }, + success_level: { + col1: evaluate.success_level == 1 ? "/" : "", + col2: evaluate.success_level == 2 ? "/" : "", + col3: evaluate.success_level == 3 ? "/" : "", + col4: evaluate.success_level == 4 ? "/" : "", + col5: evaluate.success_level == 5 ? "/" : "", + }, + achievement_other_desc: evaluate.achievement_other_desc, + achievement_other_level: + evaluate.achievement_other_level != null + ? { + col1: evaluate.achievement_other_level == 1 ? "/" : "", + col2: evaluate.achievement_other_level == 2 ? "/" : "", + col3: evaluate.achievement_other_level == 3 ? "/" : "", + col4: evaluate.achievement_other_level == 4 ? "/" : "", + col5: evaluate.achievement_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + conduct1_level: { + col1: evaluate.conduct1_level == 1 ? "/" : "", + col2: evaluate.conduct1_level == 2 ? "/" : "", + col3: evaluate.conduct1_level == 3 ? "/" : "", + col4: evaluate.conduct1_level == 4 ? "/" : "", + col5: evaluate.conduct1_level == 5 ? "/" : "", + }, + conduct2_level: { + col1: evaluate.conduct2_level == 1 ? "/" : "", + col2: evaluate.conduct2_level == 2 ? "/" : "", + col3: evaluate.conduct2_level == 3 ? "/" : "", + col4: evaluate.conduct2_level == 4 ? "/" : "", + col5: evaluate.conduct2_level == 5 ? "/" : "", + }, + conduct3_level: { + col1: evaluate.conduct3_level == 1 ? "/" : "", + col2: evaluate.conduct3_level == 2 ? "/" : "", + col3: evaluate.conduct3_level == 3 ? "/" : "", + col4: evaluate.conduct3_level == 4 ? "/" : "", + col5: evaluate.conduct3_level == 5 ? "/" : "", + }, + conduct4_level: { + col1: evaluate.conduct4_level == 1 ? "/" : "", + col2: evaluate.conduct4_level == 2 ? "/" : "", + col3: evaluate.conduct4_level == 3 ? "/" : "", + col4: evaluate.conduct4_level == 4 ? "/" : "", + col5: evaluate.conduct4_level == 5 ? "/" : "", + }, + moral1_level: { + col1: evaluate.moral1_level == 1 ? "/" : "", + col2: evaluate.moral1_level == 2 ? "/" : "", + col3: evaluate.moral1_level == 3 ? "/" : "", + col4: evaluate.moral1_level == 4 ? "/" : "", + col5: evaluate.moral1_level == 5 ? "/" : "", + }, + moral2_level: { + col1: evaluate.moral2_level == 1 ? "/" : "", + col2: evaluate.moral2_level == 2 ? "/" : "", + col3: evaluate.moral2_level == 3 ? "/" : "", + col4: evaluate.moral2_level == 4 ? "/" : "", + col5: evaluate.moral2_level == 5 ? "/" : "", + }, + moral3_level: { + col1: evaluate.moral3_level == 1 ? "/" : "", + col2: evaluate.moral3_level == 2 ? "/" : "", + col3: evaluate.moral3_level == 3 ? "/" : "", + col4: evaluate.moral3_level == 4 ? "/" : "", + col5: evaluate.moral3_level == 5 ? "/" : "", + }, + discipline1_level: { + col1: evaluate.discipline1_level == 1 ? "/" : "", + col2: evaluate.discipline1_level == 2 ? "/" : "", + col3: evaluate.discipline1_level == 3 ? "/" : "", + col4: evaluate.discipline1_level == 4 ? "/" : "", + col5: evaluate.discipline1_level == 5 ? "/" : "", + }, + discipline2_level: { + col1: evaluate.discipline2_level == 1 ? "/" : "", + col2: evaluate.discipline2_level == 2 ? "/" : "", + col3: evaluate.discipline2_level == 3 ? "/" : "", + col4: evaluate.discipline2_level == 4 ? "/" : "", + col5: evaluate.discipline2_level == 5 ? "/" : "", + }, + discipline3_level: { + col1: evaluate.discipline3_level == 1 ? "/" : "", + col2: evaluate.discipline3_level == 2 ? "/" : "", + col3: evaluate.discipline3_level == 3 ? "/" : "", + col4: evaluate.discipline3_level == 4 ? "/" : "", + col5: evaluate.discipline3_level == 5 ? "/" : "", + }, + discipline4_level: { + col1: evaluate.discipline4_level == 1 ? "/" : "", + col2: evaluate.discipline4_level == 2 ? "/" : "", + col3: evaluate.discipline4_level == 3 ? "/" : "", + col4: evaluate.discipline4_level == 4 ? "/" : "", + col5: evaluate.discipline4_level == 5 ? "/" : "", + }, + discipline5_level: { + col1: evaluate.discipline5_level == 1 ? "/" : "", + col2: evaluate.discipline5_level == 2 ? "/" : "", + col3: evaluate.discipline5_level == 3 ? "/" : "", + col4: evaluate.discipline5_level == 4 ? "/" : "", + col5: evaluate.discipline5_level == 5 ? "/" : "", + }, + behavior_other_desc: evaluate.behavior_other_desc, + behavior_other_level: + evaluate.behavior_other_level != null + ? { + col1: evaluate.behavior_other_level == 1 ? "/" : "", + col2: evaluate.behavior_other_level == 2 ? "/" : "", + col3: evaluate.behavior_other_level == 3 ? "/" : "", + col4: evaluate.behavior_other_level == 4 ? "/" : "", + col5: evaluate.behavior_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + behavior_strength_desc: evaluate.behavior_strength_desc, + behavior_improve_desc: evaluate.behavior_improve_desc, + orientation: evaluate.orientation, + self_learning: evaluate.self_learning, + training_seminar: evaluate.training_seminar, + other_training: evaluate.other_training, + createdAt: evaluate.createdAt, + updatedAt: evaluate.updatedAt, + } + + const assign = await AppDataSource.getRepository(Assign).findOne({ + select: ["id", "personal_id", "round_no", "date_start", "date_finish"], + where: { id: evaluate.assign_id }, + }) + + if (!assign) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimenteeData = await this.personalRepository.findOne({ + where: { + personal_id: assign.personal_id, + }, + }) + + if (!experimenteeData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimentee = await { + ...experimenteeData, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: "-", + OrganizationOrganization: experimenteeData.orgRootName, + Oc: experimenteeData.organization, + } + + const commanderData = await this.assignDirectorRepository.findOne({ + select: ["personal_id", "fullname", "position", "position", "posType", "posLevel", "role", "dated"], + where: { personal_id: evaluate.director_id }, + }) + + if (!commanderData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const commander = await { + ...commanderData, + name: commanderData.fullname, + Position: commanderData.position, + } + + return new HttpSuccess({ + experimentee: experimentee ? experimentee : null, + commander: commander ? commander : null, + assign, + evaluate: evaluateData, + }) + } + + /** + * API แสดงข้อมูลแบบประเมินผล (คณะกรรมการ) ตาม id + * + * @summary ข้อมูลแบบประเมินผล (คณะกรรมการ) ตาม id + * + */ + @Get("evaluate-chairman") + async GetDataEvaluateChairman(@Query() id: string, @Request() request: RequestWithUser) { + const evaluate = await this.evaluateChairmanRepository.findOne({ + where: { id }, + }) + + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const develop_total_score = await (Number(evaluate.develop_orientation_score) + + Number(evaluate.develop_self_learning_score) + + Number(evaluate.develop_training_seminar_score) + + Number(evaluate.develop_other_training_score)) + const develop_total_percent = await (Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_self_learning_percent) + + Number(evaluate.develop_training_seminar_percent)) + + const evaluateData = await { + id: evaluate.id, + // director_id: evaluate.director_id, + // assign_id: evaluate.assign_id, + no: evaluate.no, + date_start: evaluate.date_start, + date_finish: evaluate.date_finish, + chairman_dated: evaluate.chairman_dated, + director1_dated: evaluate.director1_dated, + director2_dated: evaluate.director2_dated, + knowledge_level: { + col1: evaluate.knowledge_level == 1 ? "/" : "", + col2: evaluate.knowledge_level == 2 ? "/" : "", + col3: evaluate.knowledge_level == 3 ? "/" : "", + col4: evaluate.knowledge_level == 4 ? "/" : "", + col5: evaluate.knowledge_level == 5 ? "/" : "", + }, + apply_level: { + col1: evaluate.apply_level == 1 ? "/" : "", + col2: evaluate.apply_level == 2 ? "/" : "", + col3: evaluate.apply_level == 3 ? "/" : "", + col4: evaluate.apply_level == 4 ? "/" : "", + col5: evaluate.apply_level == 5 ? "/" : "", + }, + success_level: { + col1: evaluate.success_level == 1 ? "/" : "", + col2: evaluate.success_level == 2 ? "/" : "", + col3: evaluate.success_level == 3 ? "/" : "", + col4: evaluate.success_level == 4 ? "/" : "", + col5: evaluate.success_level == 5 ? "/" : "", + }, + achievement_other_desc: evaluate.achievement_other_desc, + achievement_other_level: + evaluate.achievement_other_level != null + ? { + col1: evaluate.achievement_other_level == 1 ? "/" : "", + col2: evaluate.achievement_other_level == 2 ? "/" : "", + col3: evaluate.achievement_other_level == 3 ? "/" : "", + col4: evaluate.achievement_other_level == 4 ? "/" : "", + col5: evaluate.achievement_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + conduct1_level: { + col1: evaluate.conduct1_level == 1 ? "/" : "", + col2: evaluate.conduct1_level == 2 ? "/" : "", + col3: evaluate.conduct1_level == 3 ? "/" : "", + col4: evaluate.conduct1_level == 4 ? "/" : "", + col5: evaluate.conduct1_level == 5 ? "/" : "", + }, + conduct2_level: { + col1: evaluate.conduct2_level == 1 ? "/" : "", + col2: evaluate.conduct2_level == 2 ? "/" : "", + col3: evaluate.conduct2_level == 3 ? "/" : "", + col4: evaluate.conduct2_level == 4 ? "/" : "", + col5: evaluate.conduct2_level == 5 ? "/" : "", + }, + conduct3_level: { + col1: evaluate.conduct3_level == 1 ? "/" : "", + col2: evaluate.conduct3_level == 2 ? "/" : "", + col3: evaluate.conduct3_level == 3 ? "/" : "", + col4: evaluate.conduct3_level == 4 ? "/" : "", + col5: evaluate.conduct3_level == 5 ? "/" : "", + }, + conduct4_level: { + col1: evaluate.conduct4_level == 1 ? "/" : "", + col2: evaluate.conduct4_level == 2 ? "/" : "", + col3: evaluate.conduct4_level == 3 ? "/" : "", + col4: evaluate.conduct4_level == 4 ? "/" : "", + col5: evaluate.conduct4_level == 5 ? "/" : "", + }, + moral1_level: { + col1: evaluate.moral1_level == 1 ? "/" : "", + col2: evaluate.moral1_level == 2 ? "/" : "", + col3: evaluate.moral1_level == 3 ? "/" : "", + col4: evaluate.moral1_level == 4 ? "/" : "", + col5: evaluate.moral1_level == 5 ? "/" : "", + }, + moral2_level: { + col1: evaluate.moral2_level == 1 ? "/" : "", + col2: evaluate.moral2_level == 2 ? "/" : "", + col3: evaluate.moral2_level == 3 ? "/" : "", + col4: evaluate.moral2_level == 4 ? "/" : "", + col5: evaluate.moral2_level == 5 ? "/" : "", + }, + moral3_level: { + col1: evaluate.moral3_level == 1 ? "/" : "", + col2: evaluate.moral3_level == 2 ? "/" : "", + col3: evaluate.moral3_level == 3 ? "/" : "", + col4: evaluate.moral3_level == 4 ? "/" : "", + col5: evaluate.moral3_level == 5 ? "/" : "", + }, + discipline1_level: { + col1: evaluate.discipline1_level == 1 ? "/" : "", + col2: evaluate.discipline1_level == 2 ? "/" : "", + col3: evaluate.discipline1_level == 3 ? "/" : "", + col4: evaluate.discipline1_level == 4 ? "/" : "", + col5: evaluate.discipline1_level == 5 ? "/" : "", + }, + discipline2_level: { + col1: evaluate.discipline2_level == 1 ? "/" : "", + col2: evaluate.discipline2_level == 2 ? "/" : "", + col3: evaluate.discipline2_level == 3 ? "/" : "", + col4: evaluate.discipline2_level == 4 ? "/" : "", + col5: evaluate.discipline2_level == 5 ? "/" : "", + }, + discipline3_level: { + col1: evaluate.discipline3_level == 1 ? "/" : "", + col2: evaluate.discipline3_level == 2 ? "/" : "", + col3: evaluate.discipline3_level == 3 ? "/" : "", + col4: evaluate.discipline3_level == 4 ? "/" : "", + col5: evaluate.discipline3_level == 5 ? "/" : "", + }, + discipline4_level: { + col1: evaluate.discipline4_level == 1 ? "/" : "", + col2: evaluate.discipline4_level == 2 ? "/" : "", + col3: evaluate.discipline4_level == 3 ? "/" : "", + col4: evaluate.discipline4_level == 4 ? "/" : "", + col5: evaluate.discipline4_level == 5 ? "/" : "", + }, + discipline5_level: { + col1: evaluate.discipline5_level == 1 ? "/" : "", + col2: evaluate.discipline5_level == 2 ? "/" : "", + col3: evaluate.discipline5_level == 3 ? "/" : "", + col4: evaluate.discipline5_level == 4 ? "/" : "", + col5: evaluate.discipline5_level == 5 ? "/" : "", + }, + behavior_other_desc: evaluate.behavior_other_desc, + behavior_other_level: + evaluate.behavior_other_level != null + ? { + col1: evaluate.behavior_other_level == 1 ? "/" : "", + col2: evaluate.behavior_other_level == 2 ? "/" : "", + col3: evaluate.behavior_other_level == 3 ? "/" : "", + col4: evaluate.behavior_other_level == 4 ? "/" : "", + col5: evaluate.behavior_other_level == 5 ? "/" : "", + } + : { + col1: "", + col2: "", + col3: "", + col4: "", + col5: "", + }, + + achievement_score: evaluate.achievement_score, + achievement_score_total: evaluate.achievement_score_total, + achievement_percent: evaluate.achievement_percent, + achievement_result: evaluate.achievement_result, + behavior_score: evaluate.behavior_score, + behavior_score_total: evaluate.behavior_score_total, + behavior_percent: evaluate.behavior_percent, + behavior_result: evaluate.behavior_result, + sum_score: evaluate.sum_score, + sum_percent: evaluate.sum_percent, + + develop_orientation_score: evaluate.develop_orientation_score, + develop_self_learning_score: evaluate.develop_self_learning_score, + develop_training_seminar_score: evaluate.develop_training_seminar_score, + develop_other_training_score: evaluate.develop_other_training_score, + develop_total_score: develop_total_score, + develop_orientation_percent: evaluate.develop_orientation_percent, + develop_self_learning_percent: evaluate.develop_self_learning_percent, + develop_training_seminar_percent: evaluate.develop_training_seminar_percent, + develop_other_training_percent: evaluate.develop_other_training_percent, + develop_total_percent: develop_total_percent, + develop_result: evaluate.develop_result, + evaluate_result: evaluate.evaluate_result, + createdAt: evaluate.createdAt, + updatedAt: evaluate.updatedAt, + } + + const assign = await AppDataSource.getRepository(Assign).findOne({ + select: ["id", "personal_id", "round_no", "date_start", "date_finish"], + where: { id: evaluate.assign_id }, + }) + + if (!assign) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimenteeData = await this.personalRepository.findOne({ + where: { + personal_id: assign.personal_id, + }, + }) + + if (!experimenteeData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const experimentee = await { + ...experimenteeData, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: "-", + OrganizationOrganization: experimenteeData.orgRootName, + Oc: experimenteeData.organization, + } + + const directorData = await this.assignDirectorRepository.find({ + select: ["personal_id", "fullname", "position", "posType", "posLevel", "role", "dated"], + where: { assign_id: assign.id }, + }) + + if (!directorData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") + } + + const director = await Promise.all( + directorData.map(async element => { + return { + ...element, + name: element.fullname, + Position: element.position, + } + }) + ) + + const mentorData = await (director.find(x => x.role == "mentor") ?? null) + const mentor = mentorData != null ? mentorData : null + + const commanderData = await (director.find(x => x.role == "commander") ?? null) + const commander = commanderData != null ? commanderData : null + + const chairmanData = await (director.find(x => x.role == "chairman") ?? null) + const chairman = chairmanData != null ? chairmanData : null + + return new HttpSuccess({ + experimentee: experimentee ? experimentee : null, + chairman: chairman ? chairman : null, + director1: commander ? commander : null, + director2: mentor ? mentor : null, + assign, + evaluate: evaluateData, + }) + } + + @Post("command11/officer/report/excecute") + public async command11Excecute( + @Request() request: RequestWithUser, + @Body() + body: { + refIds: { + refId: string + commandAffectDate: Date | null + commandNo: string | null + commandYear: number + templateDoc: string | null + amount: Double | null + positionSalaryAmount: Double | null + mouthSalaryAmount: Double | null + }[] + } + ) { + await new CallAPI() + .PostData(request, "/org/command/excexute/salary-probation", { + data: body.refIds.map(v => ({ + profileId: v.refId, + date: v.commandAffectDate, + refCommandNo: `${v.commandNo}/${Extension.ToThaiYear(v.commandYear)}`, + salaryRef: v.templateDoc, + })), + }) + .then(async res => {}) + .catch(() => {}) + return new HttpSuccess() + } + @Post("command11/officer/report") + public async command11( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[] + } + ) { + const lists = await this.personalRepository.find({ + where: { probation_status: 2, personal_id: In(body.refIds) }, + }) + + return new HttpSuccess() + } + + @Post("command12/officer/report/excecute") + public async command12Excecute( + @Request() request: RequestWithUser, + @Body() + body: { + refIds: { + refId: string + commandAffectDate: Date | null + commandNo: string | null + commandYear: number + templateDoc: string | null + amount: Double | null + positionSalaryAmount: Double | null + mouthSalaryAmount: Double | null + }[] + } + ) { + await new CallAPI() + .PostData(request, "/org/command/excexute/salary-probation-leave", { + data: body.refIds.map(v => ({ + profileId: v.refId, + date: v.commandAffectDate, + refCommandNo: `${v.commandNo}/${Extension.ToThaiYear(v.commandYear)}`, + salaryRef: v.templateDoc, + })), + }) + .then(async res => {}) + .catch(() => {}) + return new HttpSuccess() + } + @Post("command12/officer/report") + public async command12( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[] + } + ) { + const lists = await this.personalRepository.find({ + where: { probation_status: 3, personal_id: In(body.refIds) }, + }) + + return new HttpSuccess() + } } diff --git a/src/controllers/SurveyController.ts b/src/controllers/SurveyController.ts index 38c9632..3a471fb 100644 --- a/src/controllers/SurveyController.ts +++ b/src/controllers/SurveyController.ts @@ -18,12 +18,12 @@ import { setLogDataDiff } from "../interfaces/utils"; import { Survey } from "../entities/Survey"; import { AppDataSource } from "../database/data-source"; -@Route("api/v1/survey") +@Route("api/v1/probation/survey") @Tags("Survey") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class SurveyController extends Controller { @@ -36,16 +36,13 @@ export class SurveyController extends Controller { * */ @Get("") - async GetSurvey( - @Query() assign_id: string, - @Request() request: RequestWithUser - ) { - const result = await this.surveyRepository.findOne({ + async GetSurvey(@Query() assign_id: string) { + const data = await this.surveyRepository.findOne({ where: { assign_id, }, }); - return new HttpSuccess(result); + return new HttpSuccess(data); } /** @@ -58,13 +55,13 @@ export class SurveyController extends Controller { async PostSurvey( @Query() assign_id: string, @Body() requestBody: any, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { const before = null; - const data = await { ...requestBody, personal_id: request.user.sub }; + const data = await { ...requestBody, personal_id: request.user.sub, assign_id }; await this.surveyRepository.save(data, { data: request }); setLogDataDiff(request, { before, after: data }); - return new HttpSuccess(data); + return new HttpSuccess(); } } diff --git a/src/entities/Assign.ts b/src/entities/Assign.ts index e7015df..ce84ab2 100644 --- a/src/entities/Assign.ts +++ b/src/entities/Assign.ts @@ -1,20 +1,7 @@ -import { - CreateEvaluateCommander, - EvaluateCommander, -} from "./EvaluateCommander"; -import { - Entity, - Column, - OneToMany, - JoinColumn, - PrimaryGeneratedColumn, - ManyToOne, -} from "typeorm"; +import { CreateEvaluateCommander, EvaluateCommander } from "./EvaluateCommander"; +import { Entity, Column, OneToMany, JoinColumn, PrimaryGeneratedColumn, ManyToOne } from "typeorm"; import { EntityBase } from "./base/Base"; -import { - AssignCompetencyGroup, - CreateAssignCompetencyGroup, -} from "./AssignCompetencyGroup"; +import { AssignCompetencyGroup, CreateAssignCompetencyGroup } from "./AssignCompetencyGroup"; import { CreateSurvel, Survey } from "./Survey"; import { AssignCompetency, CreateAssignCompetency } from "./AssignCompetency"; import { AssignDirector, CreateAssignDirector } from "./AssignDirector"; @@ -23,10 +10,7 @@ import { AssignKnowledge, CreateAssignKnowledge } from "./AssignKnowledge"; import { AssignLaw, CreateAssignLaw } from "./AssignLaw"; import { AssignOutput, CreateAssignOutput } from "./AssignOutput"; import { AssignSkill, CreateAssignSkill } from "./AssignSkill"; -import { - CreateEvaluateAchievement, - EvaluateAchievement, -} from "./EvaluateAchievement"; +import { CreateEvaluateAchievement, EvaluateAchievement } from "./EvaluateAchievement"; import { CreateEvaluateAssessor, EvaluateAssessor } from "./EvaluateAssessor"; import { CreateEvaluateChairman, EvaluateChairman } from "./EvaluateChairman"; import { CreateEvaluateResult, EvaluateResult } from "./EvaluateResult"; @@ -96,28 +80,28 @@ export class Assign extends EntityBase { }) active: number; + @Column({ + nullable: true, + comment: "กฎหมายอื่นๆ", + }) + other_desc!: string; + @ManyToOne(() => Personal, (person: Personal) => person.personal_id) @JoinColumn({ name: "personal_id" }) profile: Personal; @OneToMany( () => AssignCompetencyGroup, - (competencyGroup: AssignCompetencyGroup) => competencyGroup.assign + (competencyGroup: AssignCompetencyGroup) => competencyGroup.assign, ) @JoinColumn({ name: "id" }) competencyGroups: AssignCompetencyGroup[]; - @OneToMany( - () => AssignCompetency, - (competency: AssignCompetency) => competency.assign - ) + @OneToMany(() => AssignCompetency, (competency: AssignCompetency) => competency.assign) @JoinColumn({ name: "id" }) competencys: AssignCompetency[]; - @OneToMany( - () => AssignDirector, - (director: AssignDirector) => director.assign - ) + @OneToMany(() => AssignDirector, (director: AssignDirector) => director.assign) @JoinColumn({ name: "id" }) directors: AssignDirector[]; @@ -125,10 +109,7 @@ export class Assign extends EntityBase { @JoinColumn({ name: "id" }) jobs: AssignJob[]; - @OneToMany( - () => AssignKnowledge, - (knowledge: AssignKnowledge) => knowledge.assign - ) + @OneToMany(() => AssignKnowledge, (knowledge: AssignKnowledge) => knowledge.assign) @JoinColumn({ name: "id" }) knowledges: AssignKnowledge[]; @@ -150,28 +131,28 @@ export class Assign extends EntityBase { @OneToMany( () => EvaluateAchievement, - (evaluateAchievement: EvaluateAchievement) => evaluateAchievement.assign + (evaluateAchievement: EvaluateAchievement) => evaluateAchievement.assign, ) @JoinColumn({ name: "id" }) evaluateAchievements: EvaluateAchievement; @OneToMany( () => EvaluateAssessor, - (evaluateAssessor: EvaluateAssessor) => evaluateAssessor.assign + (evaluateAssessor: EvaluateAssessor) => evaluateAssessor.assign, ) @JoinColumn({ name: "id" }) evaluateAssessors: EvaluateAssessor; @OneToMany( () => EvaluateChairman, - (evaluateChairman: EvaluateChairman) => evaluateChairman.assign + (evaluateChairman: EvaluateChairman) => evaluateChairman.assign, ) @JoinColumn({ name: "id" }) evaluateChairmans: EvaluateChairman; @OneToMany( () => EvaluateCommander, - (evaluateCommander: EvaluateCommander) => evaluateCommander.assign + (evaluateCommander: EvaluateCommander) => evaluateCommander.assign, ) @JoinColumn({ name: "id" }) evaluateCommanders: EvaluateCommander; @@ -193,7 +174,7 @@ export class CreateAssign { @Column() experimenter_dated?: Date; @Column() - personal_id?: string; + personalId?: string; fullname?: string; position?: string; monthSelect?: number; diff --git a/src/entities/AssignLaw.ts b/src/entities/AssignLaw.ts index e999995..245aa8e 100644 --- a/src/entities/AssignLaw.ts +++ b/src/entities/AssignLaw.ts @@ -1,4 +1,4 @@ -import { Entity, Column, ManyToOne, JoinColumn, OneToMany } from "typeorm"; +import { Entity, Column, ManyToOne, JoinColumn, OneToMany, OneToOne } from "typeorm"; import { EntityBase } from "./base/Base"; import { Assign } from "./Assign"; import { Law } from "./Law"; @@ -27,13 +27,13 @@ export class AssignLaw extends EntityBase { }) ordering: number; - @ManyToOne(() => Assign, (assign: Assign) => assign.laws) + @ManyToOne(() => Assign, (assign: Assign) => assign.id) @JoinColumn({ name: "assign_id" }) assign: Assign; - @OneToMany(() => Law, (law: Law) => law.assignLaw) - @JoinColumn({ name: "law_id" }) - law: Law; + // @ManyToOne(() => Law, (law: Law) => law.assignLaw) + // @JoinColumn({ name: "law_id" }) + // law: Law; } export class CreateAssignLaw { diff --git a/src/entities/EvaluateResult.ts b/src/entities/EvaluateResult.ts index 2e972b0..b81dc42 100644 --- a/src/entities/EvaluateResult.ts +++ b/src/entities/EvaluateResult.ts @@ -1,10 +1,4 @@ -import { - Entity, - Column, - ManyToOne, - JoinColumn, - PrimaryGeneratedColumn, -} from "typeorm"; +import { Entity, Column, ManyToOne, JoinColumn, PrimaryGeneratedColumn } from "typeorm"; import { EntityBase } from "./base/Base"; import { Assign } from "./Assign"; @@ -103,7 +97,7 @@ export class CreateEvaluateResult { date_finish: Date; develop_complete: number; pass_result: number; - expand_month: number; + expand_month?: number; reson: string; chairman_dated: Date | null; director1_dated: Date | null; diff --git a/src/entities/Law.ts b/src/entities/Law.ts index 6462aef..3ef961a 100644 --- a/src/entities/Law.ts +++ b/src/entities/Law.ts @@ -1,10 +1,4 @@ -import { - Entity, - Column, - PrimaryGeneratedColumn, - OneToMany, - JoinColumn, -} from "typeorm"; +import { Entity, Column, PrimaryGeneratedColumn, OneToMany, JoinColumn, OneToOne } from "typeorm"; import { EntityBase } from "./base/Base"; import { AssignLaw } from "./AssignLaw"; @@ -41,7 +35,7 @@ export class Law extends EntityBase { }) active: number; - @OneToMany(() => AssignLaw, (assignLaw: AssignLaw) => assignLaw.law_id) - @JoinColumn({ name: "id" }) - assignLaw: AssignLaw[]; + // @OneToMany(() => AssignLaw, (l: AssignLaw) => l.law_id) + // @JoinColumn({ name: "id" }) + // assignLaw: AssignLaw[]; } diff --git a/src/migration/1725594553970-update-assigntb.ts b/src/migration/1725594553970-update-assigntb.ts new file mode 100644 index 0000000..bf5f767 --- /dev/null +++ b/src/migration/1725594553970-update-assigntb.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateAssigntb1725594553970 implements MigrationInterface { + name = "UpdateAssigntb1725594553970"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE \`assign\` ADD \`other_desc\` varchar(255) NULL COMMENT 'กฎหมายอื่นๆ'`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`assign\` DROP COLUMN \`other_desc\``); + } +} diff --git a/tsoa.json b/tsoa.json index e50408a..1a4f851 100644 --- a/tsoa.json +++ b/tsoa.json @@ -9,7 +9,7 @@ "info": { "title": "bma-ehr-probation - API", "version": "0.0.1", - "description": "ระบบการพัฒนาบุคลากร/การศึกษาต่อ (Development: DV)", + "description": "ระบบทดลองปฏิบัติหน้าที่ราชการ (Probation)", "license": { "name": "by Frappet", "url": "https://frappet.com" diff --git a/workflows/release.yaml b/workflows/release.yaml deleted file mode 100644 index 0c083cc..0000000 --- a/workflows/release.yaml +++ /dev/null @@ -1,87 +0,0 @@ -name: release-test -run-name: release-test ${{ github.actor }} -on: - push: - tags: - - "version-[0-9]+.[0-9]+.[0-9]+" - workflow_dispatch: -env: - REGISTRY: docker.frappet.com - IMAGE_NAME: ehr/bma-ehr-development-service - DEPLOY_HOST: frappet.com - # COMPOSE_PATH: /home/frappet/docker/bma-ehr - COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-development -jobs: - # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=test-v1 -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd - release-test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - # skip Set up QEMU because it fail on act and container - # Gen Version try to get version from tag or inut - - name: Set output tags - id: vars - run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT - - name: Gen Version - id: gen_ver - run: | - if [[ $GITHUB_REF == 'refs/tags/'* ]]; then - IMAGE_VER=${{ steps.vars.outputs.tag }} - else - IMAGE_VER=${{ github.event.inputs.IMAGE_VER }} - fi - if [[ $IMAGE_VER == '' ]]; then - IMAGE_VER='test-vBeta' - fi - echo '::set-output name=image_ver::'$IMAGE_VER - - name: Check Version - run: | - echo $GITHUB_REF - echo ${{ steps.gen_ver.outputs.image_ver }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Login in to registry - uses: docker/login-action@v2 - with: - registry: ${{env.REGISTRY}} - username: ${{secrets.DOCKER_USER}} - password: ${{secrets.DOCKER_PASS}} - - name: Build and push docker image - uses: docker/build-push-action@v3 - with: - context: . - platforms: linux/amd64 - push: true - tags: ${{env.REGISTRY}}/${{env.IMAGE_NAME}}:${{ steps.gen_ver.outputs.image_ver }},${{env.REGISTRY}}/${{env.IMAGE_NAME}}:latest - - name: Remote Deployment - uses: appleboy/ssh-action@v0.1.8 - with: - host: ${{env.DEPLOY_HOST}} - username: frappet - password: ${{ secrets.SSH_PASSWORD }} - port: 10102 - script: | - cd "${{env.COMPOSE_PATH}}" - docker compose pull - docker compose up -d - echo "${{ steps.gen_ver.outputs.image_ver }}"> success - - uses: snow-actions/line-notify@v1.1.0 - if: success() - with: - access_token: ${{ secrets.TOKEN_LINE }} - message: | - -Success✅✅✅ - Image: ${{env.IMAGE_NAME}} - Version: ${{ steps.gen_ver.outputs.IMAGE_VER }} - By: ${{github.actor}} - - uses: snow-actions/line-notify@v1.1.0 - if: failure() - with: - access_token: ${{ secrets.TOKEN_LINE }} - message: | - -Failure❌❌❌ - Image: ${{env.IMAGE_NAME}} - Version: ${{ steps.gen_ver.outputs.IMAGE_VER }} - By: ${{github.actor}} -