From ab9b6e7bdc8eac3c304006d5f23a34907143d8eb Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 27 Feb 2025 09:18:43 +0700 Subject: [PATCH 01/18] fixing export dashboard to pdf --- src/app.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/app.ts b/src/app.ts index 1c2c289..d7d3585 100644 --- a/src/app.ts +++ b/src/app.ts @@ -36,16 +36,37 @@ async function main() { const params = new URLSearchParams(req.query as Record); const newUrl = params.toString() ? `${id}?${params.toString()}` : id; - const APIAPI_DASHBOARD = `${process.env.API_DASHBOARD}/generate-pdf`; - const body = `${process.env.API_DASHBOARD}/d/${newUrl}`; + const API_DASHBOARD = `${process.env.VITE_API_REPORT_URL}/html`; + const url = `${process.env.API_DASHBOARD}/d/${newUrl}&kiosk`; try { // เรียก API generate-pdf - const apiResponse = await axios.post(APIAPI_DASHBOARD, { url: body }); + const apiResponse = await axios.post( + API_DASHBOARD, + { + template: url, + reportName: "html-report", + htmlOption: { + querySelector: ".scrollbar-view", + }, + }, + { + headers: { + "Content-Type": "application/json", + accept: "application/pdf", + }, + responseType: "arraybuffer", + }, + ); - // console.log("Response:", apiResponse.data.pdfUrl); + console.log("Response:", apiResponse.data); - res.redirect(apiResponse.data.pdfUrl); + const pdfBuffer = Buffer.from(apiResponse.data, "binary"); + res.set({ + "Content-Type": "application/pdf", + "Content-Disposition": "attachment; filename=dashboard.pdf", + }); + res.send(pdfBuffer); } catch (error) { throw new Error("Failed to generate PDF: " + error); } From 096892e734f5c76889b24a7bc932c0a5ba963818 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Thu, 27 Feb 2025 10:42:36 +0700 Subject: [PATCH 02/18] change env dash --- src/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index d7d3585..3abc225 100644 --- a/src/app.ts +++ b/src/app.ts @@ -37,7 +37,7 @@ async function main() { const newUrl = params.toString() ? `${id}?${params.toString()}` : id; const API_DASHBOARD = `${process.env.VITE_API_REPORT_URL}/html`; - const url = `${process.env.API_DASHBOARD}/d/${newUrl}&kiosk`; + const url = `${process.env.VITE_DASHBOARD_PANEL}/d/${newUrl}&kiosk`; try { // เรียก API generate-pdf From 43ba731850127209e70416fcf2fcfa2df993ef02 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 28 Feb 2025 10:30:57 +0700 Subject: [PATCH 03/18] fixing export dashboard --- src/app.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.ts b/src/app.ts index 3abc225..40aeda3 100644 --- a/src/app.ts +++ b/src/app.ts @@ -45,9 +45,9 @@ async function main() { API_DASHBOARD, { template: url, - reportName: "html-report", + reportName: "dashboard_report", htmlOption: { - querySelector: ".scrollbar-view", + querySelector: ".dashboard-content", }, }, { From 9e14183ac72283e0fe1188252246b5a68934d2bf Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 15:59:17 +0700 Subject: [PATCH 04/18] test websocket --- package.json | 4 +- src/app.ts | 53 +- src/controllers/ReportController.ts | 4200 +++++++++++++++------------ 3 files changed, 2334 insertions(+), 1923 deletions(-) diff --git a/package.json b/package.json index f31b73c..364e8b7 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@types/node": "^20.11.5", "@types/node-cron": "^3.0.11", "@types/swagger-ui-express": "^4.1.6", + "@types/ws": "^8.5.14", "nodemon": "^3.0.3", "prettier": "^3.2.2", "ts-node": "^10.9.2", @@ -47,6 +48,7 @@ "swagger-ui-express": "^5.0.0", "tsoa": "^6.0.1", "typeorm": "^0.3.19", - "typeorm-cli": "^1.0.7" + "typeorm-cli": "^1.0.7", + "ws": "^8.18.1" } } diff --git a/src/app.ts b/src/app.ts index 40aeda3..9cb9002 100644 --- a/src/app.ts +++ b/src/app.ts @@ -10,6 +10,14 @@ import { RegisterRoutes } from "./routes"; import logMiddleware from "./middlewares/logs"; import axios from "axios"; +import http from "http"; +import { WebSocket, WebSocketServer } from "ws"; // ✅ Import WebSocket + +// ✅ สร้าง WebSocket Server โดยใช้ HTTP Server เดียวกัน +export const wss = new WebSocketServer({ noServer: true }); + + + async function main() { await AppDataSource.initialize(); @@ -18,7 +26,7 @@ async function main() { app.use( cors({ origin: "*", - }), + }) ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); @@ -56,7 +64,7 @@ async function main() { accept: "application/pdf", }, responseType: "arraybuffer", - }, + } ); console.log("Response:", apiResponse.data); @@ -75,16 +83,49 @@ async function main() { RegisterRoutes(app); app.use(error); + app.use(cors()); const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); - app.listen( + // ✅ สร้าง HTTP Server และเชื่อม Express + const server = http.createServer(app); + + // ✅ WebSocket Handling + wss.on("connection", (ws) => { + console.log("✅ WebSocket Client Connected"); + // clients.add(ws); // เก็บ client ไว้ + + // ✅ ตั้ง Heartbeat (ping/pong) + + ws.on("message", (message) => { + console.log("📩 Received:", message.toString()); + ws.send("📡 Server Received: " + message.toString()); + }); + + ws.on("close", () => { + console.log("❌ WebSocket Client Disconnected"); + }); + }); + + // ✅ อัปเกรด HTTP เป็น WebSocket + server.on("upgrade", (req, socket, head) => { + wss.handleUpgrade(req, socket, head, (ws) => { + wss.emit("connection", ws, req); + }); + }); + + server.listen( APP_PORT, APP_HOST, () => ( - console.log(`[APP] Application is running on: http://localhost:${APP_PORT}`), - console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`) - ), + console.log( + `[APP] Application is running on: http://localhost:${APP_PORT}` + ), + console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`), + console.log( + `[WS] WebSocket Server is running on ws://localhost:${APP_PORT}` + ) + ) ); } diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index a75a528..9f7f9f1 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -1,1949 +1,2317 @@ -import { Controller, Route, Security, Tags, Body, Request, Response, Get, Query, Put, Post, Path } 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 { Between, Double, In, IsNull, Not } from "typeorm" -import Extension from "../interfaces/extension" -import { Appoint } from "../entities/Appoint" -import { AppointDirector } from "../entities/AppointDirector" -import { AssignOutput } from "../entities/AssignOutput" - +import { + Controller, + Route, + Security, + Tags, + Body, + Request, + Response, + Get, + Query, + Put, + Post, + Path, +} 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 { Between, Double, In, IsNull, Not } from "typeorm"; +import Extension from "../interfaces/extension"; +import { Appoint } from "../entities/Appoint"; +import { AppointDirector } from "../entities/AppointDirector"; +import { AssignOutput } from "../entities/AssignOutput"; +import { WebSocket } from "ws"; +import { wss } from "../app"; // ✅ Import clients @Route("api/v1/probation/report") @Tags("Report") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) 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) - private appointRepository = AppDataSource.getRepository(Appoint) - private AppointDirectorRepository = AppDataSource.getRepository(AppointDirector) - private assignRepository = AppDataSource.getRepository(Assign) - private assignOutputRepository = AppDataSource.getRepository(AssignOutput) - /** - * API สำหรับออกรายงาน - * - * @summary ผลการทดลองปฏิบัติราชการ - * - */ - @Get("") - async GetReport(@Query() assign_id: string, @Query() evaluate_no: number = 1) { - const evaluate = await this.evaluateChairmanRepository.findOne({ - where: { assign_id, no: evaluate_no.toString() }, - }) - - const result = await this.evaluateResultRepository.findOne({ - where: { assign_id, no: evaluate_no.toString() }, - }) - - 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))) / 4 - const develop_total_percent = - (await (Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_self_learning_percent) + - Number(evaluate.develop_training_seminar_percent) + - Number(evaluate.develop_other_training_percent))) / 4 - - 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 + directorData.posLevel, - } - - const achievements = await this.evaluateAchievementRepository.find({ - select: ["evaluate_expect_level", "evaluate_output_level", "output_desc", "output_id", "assign_id"], - where: { evaluate_id: evaluate.id }, - order: { updatedAt: "ASC" }, - }) - - if (!achievements) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } - - let evaluate_expect_level: any = [] - let evaluate_output_level: any = [] - for (let index = 0; index < achievements.length; index++) { - const element = achievements[index] - - const outputData = await this.assignOutputRepository.findOne({ - select: ["output_desc"], - where: { id: Number(element.output_id), assign_id: element.assign_id }, - }) - await evaluate_expect_level.push({ - title: outputData?.output_desc ?? "-", - 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 ? "/" : "", - }) - - await evaluate_output_level.push({ - title: element.output_desc, - 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 ? "/" : "", - }) - } - - let achievement = { - evaluate_expect_level: evaluate_expect_level, - evaluate_output_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 splitOc = await experimenteeData.organization.split(" ") - const splitOcAmount = await splitOc.length - const organization = await experimenteeData.organization.replace(/\//g, " ") - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, - } - - 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 splitOc = await experimenteeData.organization.split(" ") - const splitOcAmount = await splitOc.length - const organization = await experimenteeData.organization.replace(/\//g, " ") - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, - } - - 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 + commanderData.posLevel, - } - - 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 splitOc = await experimenteeData.organization.split(" ") - const splitOcAmount = await splitOc.length - const organization = await experimenteeData.organization.replace(/\//g, " ") - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, - } - - 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 + element.posLevel, - } - }) - ) - - 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 - commandNo: string | null - commandYear: number | null - commandId: string | null - remark: string | null - amount: Double | null - amountSpecial?: Double | null - positionSalaryAmount: Double | null - mouthSalaryAmount: Double | null - commandCode?: string | null - commandName?: string | null - commandDateAffect: Date | null - commandDateSign: Date | null - }[] - } - ) { - await new CallAPI() - .PostData(request, "/org/command/excexute/salary-probation", { - data: body.refIds.map(v => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - }) - .then(async res => { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds.map(x => x.refId)) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 9 - await this.personalRepository.save(list) - }) - ) - }) - .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) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 8 - await this.personalRepository.save(list) - }) - ) - - return new HttpSuccess() - } - @Post("command11/officer/report/delete") - public async command11Delete( - @Request() req: RequestWithUser, - @Body() - body: { - refIds: string[] - } - ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 2 - await this.personalRepository.save(list) - }) - ) - - return new HttpSuccess() - } - - @Post("command12/officer/report/excecute") - public async command12Excecute( - @Request() request: RequestWithUser, - @Body() - body: { - refIds: { - refId: string - commandNo: string | null - commandYear: number | null - commandId: string | null - remark: string | null - amount: Double | null - amountSpecial?: Double | null - positionSalaryAmount: Double | null - mouthSalaryAmount: Double | null - commandCode?: string | null - commandName?: string | null - commandDateAffect: Date | null - commandDateSign: Date | null - }[] - } - ) { - await new CallAPI() - .PostData(request, "/org/command/excexute/salary-probation-leave", { - data: body.refIds.map(v => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - isGovernment: false, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - }) - .then(async res => { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds.map(x => x.refId)) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 9 - await this.personalRepository.save(list) - }) - ) - }) - .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) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 8 - await this.personalRepository.save(list) - }) - ) - return new HttpSuccess() - } - @Post("command12/officer/report/delete") - public async command12Delete( - @Request() req: RequestWithUser, - @Body() - body: { - refIds: string[] - } - ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds) }, - }) - await Promise.all( - lists.map(async list => { - list.probation_status = 3 - await this.personalRepository.save(list) - }) - ) - return new HttpSuccess() - } - - @Post("command10/officer/report/excecute") - public async command10Excecute( - @Request() request: RequestWithUser, - @Body() - body: { - refIds: { - refId: string - // commandAffectDate: Date | null //เก่า - commandDateAffect: Date | null //ใหม่ปรับตาม RabbitMQ ORG - commandDateSign?: Date | null - commandNo: string | null - commandId?: string | null - commandYear: number + 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); + private appointRepository = AppDataSource.getRepository(Appoint); + private AppointDirectorRepository = + AppDataSource.getRepository(AppointDirector); + private assignRepository = AppDataSource.getRepository(Assign); + private assignOutputRepository = AppDataSource.getRepository(AssignOutput); + /** + * API สำหรับออกรายงาน + * + * @summary ผลการทดลองปฏิบัติราชการ + * + */ + @Get("") + async GetReport( + @Query() assign_id: string, + @Query() evaluate_no: number = 1 + ) { + const evaluate = await this.evaluateChairmanRepository.findOne({ + where: { assign_id, no: evaluate_no.toString() }, + }); + + const result = await this.evaluateResultRepository.findOne({ + where: { assign_id, no: evaluate_no.toString() }, + }); + + 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))) / 4; + const develop_total_percent = + (await (Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_self_learning_percent) + + Number(evaluate.develop_training_seminar_percent) + + Number(evaluate.develop_other_training_percent))) / 4; + + 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 }, + }); + + // ✅ ส่งข้อมูลไปยังทุกไคลเอนต์ที่เชื่อมต่อ WebSocket + wss.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + if (client.readyState === 1) { + client.send(JSON.stringify({ name: "test" })); + } + } + }); + + // 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 + directorData.posLevel, + }; + + const achievements = await this.evaluateAchievementRepository.find({ + select: [ + "evaluate_expect_level", + "evaluate_output_level", + "output_desc", + "output_id", + "assign_id", + ], + where: { evaluate_id: evaluate.id }, + order: { updatedAt: "ASC" }, + }); + + if (!achievements) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + let evaluate_expect_level: any = []; + let evaluate_output_level: any = []; + for (let index = 0; index < achievements.length; index++) { + const element = achievements[index]; + + const outputData = await this.assignOutputRepository.findOne({ + select: ["output_desc"], + where: { id: Number(element.output_id), assign_id: element.assign_id }, + }); + await evaluate_expect_level.push({ + title: outputData?.output_desc ?? "-", + 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 ? "/" : "", + }); + + await evaluate_output_level.push({ + title: element.output_desc, + 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 ? "/" : "", + }); + } + + let achievement = { + evaluate_expect_level: evaluate_expect_level, + evaluate_output_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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + 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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + 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 + commanderData.posLevel, + }; + + 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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + 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 + element.posLevel, + }; + }) + ); + + 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; + commandNo: string | null; + commandYear: number | null; + commandId: string | null; + remark: string | null; + amount: Double | null; + amountSpecial?: Double | null; + positionSalaryAmount: Double | null; + mouthSalaryAmount: Double | null; commandCode?: string | null; commandName?: string | null; - templateDoc?: string | null - amount: Double | null - amountSpecial?: Double | null - positionSalaryAmount: Double | null - mouthSalaryAmount: Double | null - mpCee?: string | null - refCommandCode?: string | null - refCommandName?: string | null - remark?: string | null - }[] - } - ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds.map(x => x.refId)) }, - }) - await Promise.all( - lists.map(async list => { - list.status = "DONE" - list.commandNo = `${body?.refIds[0]?.commandNo || ""}/${body.refIds[0].commandYear + 543}` - await this.appointRepository.save(list) - }) - ) - return new HttpSuccess() - } - @Post("command10/officer/report") - public async command10( - @Request() req: RequestWithUser, - @Body() - body: { - refIds: string[] - } - ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds) }, - }) - await Promise.all( - lists.map(async list => { - list.status = "REPORT" - await this.appointRepository.save(list) - }) - ) - return new HttpSuccess() - } - @Post("command10/officer/report/delete") - public async command10Delete( - @Request() req: RequestWithUser, - @Body() - body: { - refIds: string[] - } - ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds) }, - }) - await Promise.all( - lists.map(async list => { - list.status = "PENDING" - await this.appointRepository.save(list) - }) - ) - return new HttpSuccess() - } + commandDateAffect: Date | null; + commandDateSign: Date | null; + }[]; + } + ) { + await new CallAPI() + .PostData(request, "/org/command/excexute/salary-probation", { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + }) + .then(async (res) => { + const lists = await this.personalRepository.find({ + where: { + probation_status: 8, + personal_id: In(body.refIds.map((x) => x.refId)), + }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 9; + await this.personalRepository.save(list); + }) + ); + }) + .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) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 8; + await this.personalRepository.save(list); + }) + ); - @Get("command10/appoints/{refId}") - public async appointList(@Request() req: RequestWithUser, @Path() refId: string) { - const lists = await this.AppointDirectorRepository.find({ - where: { appointId: refId }, - order: { createdAt: "ASC" }, - }) - const directors = await Promise.all( - lists.map(async director => { - return { - profileId: director.profileId, - name: director.name, - position: director.position, - positionType: director.positionType, - positionLevel: director.positionLevel, - role: director.role === "chairman" ? "ประธาน" : "กรรมการ", - } - }) - ) - return new HttpSuccess(directors) - } + return new HttpSuccess(); + } + @Post("command11/officer/report/delete") + public async command11Delete( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[]; + } + ) { + const lists = await this.personalRepository.find({ + where: { probation_status: 8, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 2; + await this.personalRepository.save(list); + }) + ); - @Get("report1") - public async report1(@Request() req: RequestWithUser, @Query("nodeId") nodeId?: string, @Query("node") node?: string, @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date) { - interface Result { - [rootDnaId: string]: { - rootName: string - status1: number - status2: number - status3: number - status4: number - status5: number - status6: number - status7: number - } - } + return new HttpSuccess(); + } - const rootNode = await new CallAPI().PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }).catch(error => { - console.error("Error calling API:", error) - }) - const rootNodeTrue = rootNode["isRootTrue"] - const rootNodeFalse = rootNode["isRootFalse"] + @Post("command12/officer/report/excecute") + public async command12Excecute( + @Request() request: RequestWithUser, + @Body() + body: { + refIds: { + refId: string; + commandNo: string | null; + commandYear: number | null; + commandId: string | null; + remark: string | null; + amount: Double | null; + amountSpecial?: Double | null; + positionSalaryAmount: Double | null; + mouthSalaryAmount: Double | null; + commandCode?: string | null; + commandName?: string | null; + commandDateAffect: Date | null; + commandDateSign: Date | null; + }[]; + } + ) { + await new CallAPI() + .PostData(request, "/org/command/excexute/salary-probation-leave", { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + isGovernment: false, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + }) + .then(async (res) => { + const lists = await this.personalRepository.find({ + where: { + probation_status: 8, + personal_id: In(body.refIds.map((x) => x.refId)), + }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 9; + await this.personalRepository.save(list); + }) + ); + }) + .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) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 8; + await this.personalRepository.save(list); + }) + ); + return new HttpSuccess(); + } + @Post("command12/officer/report/delete") + public async command12Delete( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[]; + } + ) { + const lists = await this.personalRepository.find({ + where: { probation_status: 8, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 3; + await this.personalRepository.save(list); + }) + ); + return new HttpSuccess(); + } - let whereRootTrue = rootNodeTrue && rootNodeTrue.rootDnaId ? { rootDna: rootNodeTrue.rootDnaId } : {} - let listsRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : [] + @Post("command10/officer/report/excecute") + public async command10Excecute( + @Request() request: RequestWithUser, + @Body() + body: { + refIds: { + refId: string; + // commandAffectDate: Date | null //เก่า + commandDateAffect: Date | null; //ใหม่ปรับตาม RabbitMQ ORG + commandDateSign?: Date | null; + commandNo: string | null; + commandId?: string | null; + commandYear: number; + commandCode?: string | null; + commandName?: string | null; + templateDoc?: string | null; + amount: Double | null; + amountSpecial?: Double | null; + positionSalaryAmount: Double | null; + mouthSalaryAmount: Double | null; + mpCee?: string | null; + refCommandCode?: string | null; + refCommandName?: string | null; + remark?: string | null; + }[]; + } + ) { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds.map((x) => x.refId)) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "DONE"; + list.commandNo = `${body?.refIds[0]?.commandNo || ""}/${body.refIds[0].commandYear + 543}`; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } + @Post("command10/officer/report") + public async command10( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[]; + } + ) { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "REPORT"; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } + @Post("command10/officer/report/delete") + public async command10Delete( + @Request() req: RequestWithUser, + @Body() + body: { + refIds: string[]; + } + ) { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "PENDING"; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } - let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId) - let listsRootFalse = - rootDnaIds && rootDnaIds.length - ? await this.personalRepository.find({ - where: { - rootDna: In(rootDnaIds), - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : [] + @Get("command10/appoints/{refId}") + public async appointList( + @Request() req: RequestWithUser, + @Path() refId: string + ) { + const lists = await this.AppointDirectorRepository.find({ + where: { appointId: refId }, + order: { createdAt: "ASC" }, + }); + const directors = await Promise.all( + lists.map(async (director) => { + return { + profileId: director.profileId, + name: director.name, + position: director.position, + positionType: director.positionType, + positionLevel: director.positionLevel, + role: director.role === "chairman" ? "ประธาน" : "กรรมการ", + }; + }) + ); + return new HttpSuccess(directors); + } - let resultTrue: Result = {} - let resultFalse: Result = {} + @Get("report1") + public async report1( + @Request() req: RequestWithUser, + @Query("nodeId") nodeId?: string, + @Query("node") node?: string, + @Query("startDate") startDate?: Date, + @Query("endDate") endDate?: Date + ) { + interface Result { + [rootDnaId: string]: { + rootName: string; + status1: number; + status2: number; + status3: number; + status4: number; + status5: number; + status6: number; + status7: number; + }; + } - listsRootTrue.forEach(item => { - let rootDnaId = item.rootDna - let status = item.probation_status - let rootName = item.orgRootName + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; - if (!resultTrue[rootDnaId]) { - resultTrue[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - } - } + let whereRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? { rootDna: rootNodeTrue.rootDnaId } + : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; - if (status >= 1 && status <= 7) { - ;(resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++ - } - }) - listsRootFalse.forEach(item => { - let rootDnaId = item.rootDna - let status = item.probation_status - let rootName = item.orgRootName + let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); + let listsRootFalse = + rootDnaIds && rootDnaIds.length + ? await this.personalRepository.find({ + where: { + rootDna: In(rootDnaIds), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; - if (!resultFalse[rootDnaId]) { - resultFalse[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - } - } + let resultTrue: Result = {}; + let resultFalse: Result = {}; - if (status >= 1 && status <= 7) { - ;(resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++ - } - }) - const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) - const resultTrueExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) - const resultTrueSuspension = "-" - const resultTrueChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) - const resultTrueResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) - const resultTrueDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) - const resultTrueNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) - const resultFalsePass = Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0) - const resultFalseExtand = Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0) - const resultFalseSuspension = "-" - const resultFalseChangePos = Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0) - const resultFalseResign = Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0) - const resultFalseDeceased = Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0) - const resultFalseNotPass = Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0) - const sumPass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0) - const sumExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0) - const sumSuspension = "-" - const sumChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0) - const sumResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0) - const sumDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0) - const sumNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0) - const sumResultTrue = Object.values(resultTrue).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3 - }, 0) - const sumResultFalse = Object.values(resultFalse).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3 - }, 0) - const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass - const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())) - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", - dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", - resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultTrue[rootDnaId] - const sum = status2 + status7 + status4 + status5 + status6 + status3 - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - } - }), - resultTruePass: resultTruePass.toString(), - resultTrueExtand: resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos: resultTrueChangePos.toString(), - resultTrueResign: resultTrueResign.toString(), - resultTrueDeceased: resultTrueDeceased.toString(), - resultTrueNotPass: resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultFalse[rootDnaId] - const sum = status2 + status7 + status4 + status5 + status6 + status3 - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - } - }), - resultFalsePass: resultFalsePass.toString(), - resultFalseExtand: resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos: resultFalseChangePos.toString(), - resultFalseResign: resultFalseResign.toString(), - resultFalseDeceased: resultFalseDeceased.toString(), - resultFalseNotPass: resultFalseNotPass.toString(), - sumPass: sumPass.toString(), - sumExtand: sumExtand.toString(), - sumSuspension: "-", - sumChangePos: sumChangePos.toString(), - sumResign: sumResign.toString(), - sumDeceased: sumDeceased.toString(), - sumNotPass: sumNotPass.toString(), - sumResultTrue: sumResultTrue.toString(), - sumResultFalse: sumResultFalse.toString(), - sumAll: sumAll.toString(), - } - return new HttpSuccess({ - template: "placementProbation01", - reportName: "xlsx-report", - data: formattedData, - }) - } + listsRootTrue.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; - @Get("report2") - public async report2(@Request() req: RequestWithUser, @Query("nodeId") nodeId?: string, @Query("node") node?: number, @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date) { - let personal = null - let result: Array = [] - switch (node) { - case 0: { - personal = await this.personalRepository.find({ - where: { - rootDna: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), - }, - }) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - break - } - case 1: { - personal = await this.personalRepository.find({ - where: { - child1Dna: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), - }, - }) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - break - } - case 2: { - personal = await this.personalRepository.find({ - where: { - child2Dna: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), - }, - }) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - break - } - case 3: { - personal = await this.personalRepository.find({ - where: { - child3Dna: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), - }, - }) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - break - } - case 4: { - personal = await this.personalRepository.find({ - where: { - child4Dna: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), - }, - }) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - break - } - default: { - personal = await this.personalRepository.find({}) - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }) - const no = idx + 1 - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - } - }) - ) - } - } + if (!resultTrue[rootDnaId]) { + resultTrue[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } - result = await Promise.all( - personal.flatMap(x => - (x.assigns.length > 0 ? x.assigns : [{ id: null, date_start: null, date_finish: null }]).map(async assign => { - let accExam: string = "" - let dateAppoint: Date | any = null - await new CallAPI() - .GetData(req, `/placement/exam-probation/${x.idcard}`) - .then(async x => { - accExam = x.examName - dateAppoint = x.dateAppoint - }) - .catch(errr => {}) + if (status >= 1 && status <= 7) { + (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; + } + }); + listsRootFalse.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; - const evaluateComman = await this.evaluateCommanderRepository.findOne({ - where: { assign_id: assign.id ?? "" }, - }) + if (!resultFalse[rootDnaId]) { + resultFalse[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } - return { - no: Extension.ToThaiNumber(x.no.toString()), - accExam: accExam, - fullName: x.fullName, - positionName: x.positionName, - organization: x.organization, - dateAppoint: dateAppoint ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) : "", - dateStart: x.assigns.length > 0 && assign.date_start != null ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_start)) : "", - dateFinish: x.assigns.length > 0 && assign.date_finish != null ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_finish)) : "", - day: - x.assigns.length > 0 && assign.date_start != null && assign.date_finish != null - ? Extension.ToThaiNumber(`${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน`) - : "", - status: x.probation_status ? Extension.probationStatus(x.probation_status) : "", - orientation: evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", - learning: evaluateComman && evaluateComman?.self_learning == 1 ? "☑" : "☐", - seminar: evaluateComman && evaluateComman?.training_seminar == 1 ? "☑" : "☐", - other: evaluateComman && evaluateComman?.other_training == 1 ? "☑" : "☐", - } - }) - ) - ) + if (status >= 1 && status <= 7) { + (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumPass = + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); + const sumExtand = + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); + const sumResign = + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); + const sumDeceased = + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); + const sumNotPass = + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumAll = + sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber( + Extension.ToThaiShortDate(new Date()) + ); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + dateStart: startDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) + : "", + dateEnd: endDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) + : "", + resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultTrue[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultFalse[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; + return new HttpSuccess({ + template: "placementProbation01", + reportName: "xlsx-report", + data: formattedData, + }); + } - return new HttpSuccess({ - template: "placementProbation02", - reportName: "xlsx-report", - data: { - date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date()))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date()))}`, - dateCurrent: `ณ ${Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date()))}`, - data: result, - }, - }) - } + @Get("report2") + public async report2( + @Request() req: RequestWithUser, + @Query("nodeId") nodeId?: string, + @Query("node") node?: number, + @Query("startDate") startDate?: Date, + @Query("endDate") endDate?: Date + ) { + let personal = null; + let result: Array = []; + switch (node) { + case 0: { + personal = await this.personalRepository.find({ + where: { + rootDna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 1: { + personal = await this.personalRepository.find({ + where: { + child1Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 2: { + personal = await this.personalRepository.find({ + where: { + child2Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 3: { + personal = await this.personalRepository.find({ + where: { + child3Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 4: { + personal = await this.personalRepository.find({ + where: { + child4Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + default: { + personal = await this.personalRepository.find({}); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + } + } - @Get("report3") - public async report3(@Request() req: RequestWithUser, @Query("nodeId") nodeId?: string, @Query("node") node?: string, @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date) { - interface Result { - [rootDnaId: string]: { - rootName: string - status1: number - status2: number - status3: number - status4: number - status5: number - status6: number - status7: number - } - } + result = await Promise.all( + personal.flatMap((x) => + (x.assigns.length > 0 + ? x.assigns + : [{ id: null, date_start: null, date_finish: null }] + ).map(async (assign) => { + let accExam: string = ""; + let dateAppoint: Date | any = null; + await new CallAPI() + .GetData(req, `/placement/exam-probation/${x.idcard}`) + .then(async (x) => { + accExam = x.examName; + dateAppoint = x.dateAppoint; + }) + .catch((errr) => {}); - const rootNode = await new CallAPI().PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }).catch(error => { - console.error("Error calling API:", error) - }) - const rootNodeTrue = rootNode["isRootTrue"] - const rootNodeFalse = rootNode["isRootFalse"] + const evaluateComman = await this.evaluateCommanderRepository.findOne( + { + where: { assign_id: assign.id ?? "" }, + } + ); - let whereRootTrue = rootNodeTrue && rootNodeTrue.rootDnaId ? { rootDna: rootNodeTrue.rootDnaId } : {} - let listsRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : [] + return { + no: Extension.ToThaiNumber(x.no.toString()), + accExam: accExam, + fullName: x.fullName, + positionName: x.positionName, + organization: x.organization, + dateAppoint: dateAppoint + ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) + : "", + dateStart: + x.assigns.length > 0 && assign.date_start != null + ? Extension.ToThaiNumber( + Extension.ToThaiFullDate2(assign.date_start) + ) + : "", + dateFinish: + x.assigns.length > 0 && assign.date_finish != null + ? Extension.ToThaiNumber( + Extension.ToThaiFullDate2(assign.date_finish) + ) + : "", + day: + x.assigns.length > 0 && + assign.date_start != null && + assign.date_finish != null + ? Extension.ToThaiNumber( + `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน` + ) + : "", + status: x.probation_status + ? Extension.probationStatus(x.probation_status) + : "", + orientation: + evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", + learning: + evaluateComman && evaluateComman?.self_learning == 1 ? "☑" : "☐", + seminar: + evaluateComman && evaluateComman?.training_seminar == 1 + ? "☑" + : "☐", + other: + evaluateComman && evaluateComman?.other_training == 1 + ? "☑" + : "☐", + }; + }) + ) + ); - let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId) - let listsRootFalse = - rootDnaIds && rootDnaIds.length - ? await this.personalRepository.find({ - where: { - rootDna: In(rootDnaIds), - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : [] + return new HttpSuccess({ + template: "placementProbation02", + reportName: "xlsx-report", + data: { + date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date()))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date()))}`, + dateCurrent: `ณ ${Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date()))}`, + data: result, + }, + }); + } - let resultTrue: Result = {} - let resultFalse: Result = {} + @Get("report3") + public async report3( + @Request() req: RequestWithUser, + @Query("nodeId") nodeId?: string, + @Query("node") node?: string, + @Query("startDate") startDate?: Date, + @Query("endDate") endDate?: Date + ) { + interface Result { + [rootDnaId: string]: { + rootName: string; + status1: number; + status2: number; + status3: number; + status4: number; + status5: number; + status6: number; + status7: number; + }; + } - listsRootTrue.forEach(item => { - let rootDnaId = item.rootDna - let status = item.probation_status - let rootName = item.orgRootName + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; - if (!resultTrue[rootDnaId]) { - resultTrue[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - } - } + let whereRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? { rootDna: rootNodeTrue.rootDnaId } + : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; - if (status >= 1 && status <= 7) { - ;(resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++ - } - }) - listsRootFalse.forEach(item => { - let rootDnaId = item.rootDna - let status = item.probation_status - let rootName = item.orgRootName + let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); + let listsRootFalse = + rootDnaIds && rootDnaIds.length + ? await this.personalRepository.find({ + where: { + rootDna: In(rootDnaIds), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; - if (!resultFalse[rootDnaId]) { - resultFalse[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - } - } + let resultTrue: Result = {}; + let resultFalse: Result = {}; - if (status >= 1 && status <= 7) { - ;(resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++ - } - }) - const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) - const resultTrueExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) - const resultTrueSuspension = "-" - const resultTrueChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) - const resultTrueResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) - const resultTrueDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) - const resultTrueNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) - const resultFalsePass = Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0) - const resultFalseExtand = Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0) - const resultFalseSuspension = "-" - const resultFalseChangePos = Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0) - const resultFalseResign = Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0) - const resultFalseDeceased = Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0) - const resultFalseNotPass = Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0) - const sumPass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0) - const sumExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0) - const sumSuspension = "-" - const sumChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0) - const sumResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0) - const sumDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0) - const sumNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0) - const sumResultTrue = Object.values(resultTrue).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3 - }, 0) - const sumResultFalse = Object.values(resultFalse).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3 - }, 0) - const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass - const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())) - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - accExam: "", - dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", - dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", - resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultTrue[rootDnaId] - const sum = status2 + status7 + status4 + status5 + status6 + status3 - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - } - }), - resultTruePass: resultTruePass.toString(), - resultTrueExtand: resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos: resultTrueChangePos.toString(), - resultTrueResign: resultTrueResign.toString(), - resultTrueDeceased: resultTrueDeceased.toString(), - resultTrueNotPass: resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultFalse[rootDnaId] - const sum = status2 + status7 + status4 + status5 + status6 + status3 - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - } - }), - resultFalsePass: resultFalsePass.toString(), - resultFalseExtand: resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos: resultFalseChangePos.toString(), - resultFalseResign: resultFalseResign.toString(), - resultFalseDeceased: resultFalseDeceased.toString(), - resultFalseNotPass: resultFalseNotPass.toString(), - sumPass: sumPass.toString(), - sumExtand: sumExtand.toString(), - sumSuspension: "-", - sumChangePos: sumChangePos.toString(), - sumResign: sumResign.toString(), - sumDeceased: sumDeceased.toString(), - sumNotPass: sumNotPass.toString(), - sumResultTrue: sumResultTrue.toString(), - sumResultFalse: sumResultFalse.toString(), - sumAll: sumAll.toString(), - } - return new HttpSuccess({ - template: "placementProbation03", - reportName: "xlsx-report", - data: formattedData, - }) - } + listsRootTrue.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultTrue[rootDnaId]) { + resultTrue[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; + } + }); + listsRootFalse.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultFalse[rootDnaId]) { + resultFalse[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumPass = + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); + const sumExtand = + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); + const sumResign = + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); + const sumDeceased = + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); + const sumNotPass = + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumAll = + sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber( + Extension.ToThaiShortDate(new Date()) + ); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + accExam: "", + dateStart: startDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) + : "", + dateEnd: endDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) + : "", + resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultTrue[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultFalse[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; + return new HttpSuccess({ + template: "placementProbation03", + reportName: "xlsx-report", + data: formattedData, + }); + } } From e94319a6b67c7c109f2352658c989cc4a54e0e75 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 16:04:14 +0700 Subject: [PATCH 05/18] package --- package-lock.json | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 33ef688..cfd023a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,8 @@ "swagger-ui-express": "^5.0.0", "tsoa": "^6.0.1", "typeorm": "^0.3.19", - "typeorm-cli": "^1.0.7" + "typeorm-cli": "^1.0.7", + "ws": "^8.18.1" }, "devDependencies": { "@types/amqplib": "^0.10.5", @@ -37,6 +38,7 @@ "@types/node": "^20.11.5", "@types/node-cron": "^3.0.11", "@types/swagger-ui-express": "^4.1.6", + "@types/ws": "^8.5.14", "nodemon": "^3.0.3", "prettier": "^3.2.2", "ts-node": "^10.9.2", @@ -866,6 +868,15 @@ "@types/serve-static": "*" } }, + "node_modules/@types/ws": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", + "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/zen-observable": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", @@ -5769,6 +5780,26 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", From 5585f2e7c13c30143d8e4b852bdd99dd088ef113 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 16:14:53 +0700 Subject: [PATCH 06/18] test --- src/app.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/app.ts b/src/app.ts index 9cb9002..672d15d 100644 --- a/src/app.ts +++ b/src/app.ts @@ -14,9 +14,10 @@ import http from "http"; import { WebSocket, WebSocketServer } from "ws"; // ✅ Import WebSocket // ✅ สร้าง WebSocket Server โดยใช้ HTTP Server เดียวกัน -export const wss = new WebSocketServer({ noServer: true }); - - +export const wss = new WebSocketServer({ + noServer: true, + path: "/api/v1/probation/ws", +}); async function main() { await AppDataSource.initialize(); From a95439f05560b1c6032b483dedc0ab472c82fbdd Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 16:45:19 +0700 Subject: [PATCH 07/18] fix test --- src/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index 672d15d..fcd4f86 100644 --- a/src/app.ts +++ b/src/app.ts @@ -84,7 +84,7 @@ async function main() { RegisterRoutes(app); app.use(error); - app.use(cors()); + // app.use(cors()); const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); From c1b7c65c9c5e18d887903b76b4cbf26aec5ecfb4 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 6 Mar 2025 16:57:43 +0700 Subject: [PATCH 08/18] fix --- src/app.ts | 39 +---------------------------- src/controllers/ReportController.ts | 14 ++--------- 2 files changed, 3 insertions(+), 50 deletions(-) diff --git a/src/app.ts b/src/app.ts index fcd4f86..95d3219 100644 --- a/src/app.ts +++ b/src/app.ts @@ -10,15 +10,6 @@ import { RegisterRoutes } from "./routes"; import logMiddleware from "./middlewares/logs"; import axios from "axios"; -import http from "http"; -import { WebSocket, WebSocketServer } from "ws"; // ✅ Import WebSocket - -// ✅ สร้าง WebSocket Server โดยใช้ HTTP Server เดียวกัน -export const wss = new WebSocketServer({ - noServer: true, - path: "/api/v1/probation/ws", -}); - async function main() { await AppDataSource.initialize(); @@ -84,38 +75,10 @@ async function main() { RegisterRoutes(app); app.use(error); - // app.use(cors()); const APP_HOST = process.env.APP_HOST || "0.0.0.0"; const APP_PORT = +(process.env.APP_PORT || 3000); - // ✅ สร้าง HTTP Server และเชื่อม Express - const server = http.createServer(app); - - // ✅ WebSocket Handling - wss.on("connection", (ws) => { - console.log("✅ WebSocket Client Connected"); - // clients.add(ws); // เก็บ client ไว้ - - // ✅ ตั้ง Heartbeat (ping/pong) - - ws.on("message", (message) => { - console.log("📩 Received:", message.toString()); - ws.send("📡 Server Received: " + message.toString()); - }); - - ws.on("close", () => { - console.log("❌ WebSocket Client Disconnected"); - }); - }); - - // ✅ อัปเกรด HTTP เป็น WebSocket - server.on("upgrade", (req, socket, head) => { - wss.handleUpgrade(req, socket, head, (ws) => { - wss.emit("connection", ws, req); - }); - }); - - server.listen( + app.listen( APP_PORT, APP_HOST, () => ( diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 9f7f9f1..6e9d082 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -32,8 +32,7 @@ import Extension from "../interfaces/extension"; import { Appoint } from "../entities/Appoint"; import { AppointDirector } from "../entities/AppointDirector"; import { AssignOutput } from "../entities/AssignOutput"; -import { WebSocket } from "ws"; -import { wss } from "../app"; // ✅ Import clients + @Route("api/v1/probation/report") @Tags("Report") @Security("bearerAuth") @@ -210,16 +209,7 @@ export class ReportController extends Controller { where: { probation_status: 7 }, }); - // ✅ ส่งข้อมูลไปยังทุกไคลเอนต์ที่เชื่อมต่อ WebSocket - wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - if (client.readyState === 1) { - client.send(JSON.stringify({ name: "test" })); - } - } - }); - - // return new HttpSuccess(data); + return new HttpSuccess(data); } /** From a4dfb3c87caf37a7385c5a0008e5e9db033fb7ec Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Mon, 10 Mar 2025 14:40:16 +0700 Subject: [PATCH 09/18] fixing timezone --- src/database/data-source.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/database/data-source.ts b/src/database/data-source.ts index 3061dfe..5ee166c 100644 --- a/src/database/data-source.ts +++ b/src/database/data-source.ts @@ -62,6 +62,7 @@ export const AppDataSource = new DataSource({ password: process.env.DB_PASSWORD, connectorPackage: "mysql2", synchronize: false, + timezone: "Z", // "Z" = UTC logging: ["query", "error"], entities: process.env.NODE_ENV !== "production" From df74e0226e7fbe191856b1030a0a282e70e6d5ed Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Wed, 26 Mar 2025 14:35:09 +0700 Subject: [PATCH 10/18] trycatch --- src/app.ts | 5 +- src/controllers/AppointController.ts | 255 +- src/controllers/AssignController.ts | 1897 ++++---- .../AssignPermissionsController.ts | 102 +- src/controllers/CalculateController.ts | 71 +- src/controllers/DataOptionsController.ts | 702 +-- src/controllers/EvaluateChairmanController.ts | 874 ++-- src/controllers/EvaluateController.ts | 731 +-- src/controllers/EvaluateRecordController.ts | 2409 +++++----- src/controllers/EvaluateResultController.ts | 1010 ++-- src/controllers/PersonalController.ts | 535 ++- src/controllers/ReportController.ts | 4055 +++++++++-------- src/controllers/SurveyController.ts | 288 +- 13 files changed, 7057 insertions(+), 5877 deletions(-) diff --git a/src/app.ts b/src/app.ts index 95d3219..99eb1fb 100644 --- a/src/app.ts +++ b/src/app.ts @@ -85,10 +85,7 @@ async function main() { console.log( `[APP] Application is running on: http://localhost:${APP_PORT}` ), - console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`), - console.log( - `[WS] WebSocket Server is running on ws://localhost:${APP_PORT}` - ) + console.log(`[APP] Swagger on: http://localhost:${APP_PORT}/api-docs`) ) ); } diff --git a/src/controllers/AppointController.ts b/src/controllers/AppointController.ts index 658f874..6bb8256 100644 --- a/src/controllers/AppointController.ts +++ b/src/controllers/AppointController.ts @@ -22,7 +22,12 @@ import HttpStatusCode from "../interfaces/http-status"; import HttpError from "../interfaces/http-error"; import permission from "../interfaces/permission"; import { RequestWithUser } from "../middlewares/user"; -import { Appoint, CreateAppoint, Person, UpdateAppoint } from "../entities/Appoint"; +import { + Appoint, + CreateAppoint, + Person, + UpdateAppoint, +} from "../entities/Appoint"; import { AppointDirector } from "../entities/AppointDirector"; import CallAPI from "../interfaces/call-api"; @@ -31,11 +36,12 @@ import CallAPI from "../interfaces/call-api"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" ) export class AppointController extends Controller { private appointRepository = AppDataSource.getRepository(Appoint); - private appointDirectorRepository = AppDataSource.getRepository(AppointDirector); + private appointDirectorRepository = + AppDataSource.getRepository(AppointDirector); /** * API รายการแต่งตั้งคณะกรรมการฯ ทดลองงาน @@ -48,8 +54,21 @@ export class AppointController extends Controller { @Query() keyword: string = "", @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, - @Request() request: RequestWithUser, + @Request() request: RequestWithUser ) { + try { + const appoint = await this.appointRepository.find({ + relations: ["personal", "directors"], + where: { createdUserId: request.user.sub }, + // where: { personal: conditions }, + }); + + return new HttpSuccess(appoint); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } // await new permission().PermissionList(request, "SYS_PROBATION") // const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION") @@ -74,14 +93,6 @@ export class AppointController extends Controller { // if (_data.child4 != undefined && _data.child4 != null && _data.child4[0] != null) { // conditions.child4 = _data.child4 // } - - const appoint = await this.appointRepository.find({ - relations: ["personal", "directors"], - where: { createdUserId: request.user.sub }, - // where: { personal: conditions }, - }); - - return new HttpSuccess(appoint); } /** @@ -91,13 +102,22 @@ export class AppointController extends Controller { * */ @Get("list/{id}") - async GetListCommand(@Request() request: RequestWithUser, @Path() id: string) { - const appoint = await this.appointRepository.find({ - relations: ["directors"], - where: { profileId: id, status: "DONE" }, - }); + async GetListCommand( + @Request() request: RequestWithUser, + @Path() id: string + ) { + try { + const appoint = await this.appointRepository.find({ + relations: ["directors"], + where: { profileId: id, status: "DONE" }, + }); - return new HttpSuccess(appoint); + return new HttpSuccess(appoint); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -107,20 +127,31 @@ export class AppointController extends Controller { * */ @Post("") - async Create(@Request() request: RequestWithUser, @Body() requestBody: CreateAppoint) { - await new permission().PermissionCreate(request, "SYS_PROBATION"); + async Create( + @Request() request: RequestWithUser, + @Body() requestBody: CreateAppoint + ) { + try { + await new permission().PermissionCreate(request, "SYS_PROBATION"); - const data: any = { - topic: requestBody.topic, - profileId: requestBody.profileId, - createdUserId: request.user.sub, - createdFullName: request.user.name, - }; - const before = null; - const appoint = await this.appointRepository.save(data, { data: request }); - setLogDataDiff(request, { before, after: appoint }); + const data: any = { + topic: requestBody.topic, + profileId: requestBody.profileId, + createdUserId: request.user.sub, + createdFullName: request.user.name, + }; + const before = null; + const appoint = await this.appointRepository.save(data, { + data: request, + }); + setLogDataDiff(request, { before, after: appoint }); - return new HttpSuccess(appoint.id); + return new HttpSuccess(appoint.id); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -131,16 +162,27 @@ export class AppointController extends Controller { */ @Get("{id}") async GetById(@Request() request: RequestWithUser, @Path() id: string) { - let _workflow = await new permission().Workflow(request, id, "SYS_PROBATION"); - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); + try { + let _workflow = await new permission().Workflow( + request, + id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - const appoint = await this.appointRepository.findOne({ - select: ["id", "topic", "status", "profileId"], - where: { id }, - relations: ["directors"], - }); + const appoint = await this.appointRepository.findOne({ + select: ["id", "topic", "status", "profileId"], + where: { id }, + relations: ["directors"], + }); - return new HttpSuccess(appoint); + return new HttpSuccess(appoint); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -153,38 +195,47 @@ export class AppointController extends Controller { async Update( @Request() request: RequestWithUser, @Body() requestBody: UpdateAppoint, - @Path() id: string, + @Path() id: string ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const appoint: any = await this.appointRepository.findOne({ - where: { id }, - }); + const appoint: any = await this.appointRepository.findOne({ + where: { id }, + }); - if (!appoint) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการแต่งตั้งคณะกรรมการฯ"); + if (!appoint) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลการแต่งตั้งคณะกรรมการฯ" + ); + } + + const before = appoint; + + appoint.topic = requestBody.topic; + appoint.updateUserId = request.user.sub; + appoint.updateFullName = request.user.name; + await this.appointDirectorRepository.delete({ appointId: id }); + const directors: any = await requestBody.persons.map((x: Person) => ({ + ...x, + appointId: id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + })); + await this.appointDirectorRepository.save(directors); + + await this.appointRepository.save(appoint, { data: request }); + setLogDataDiff(request, { before, after: appoint }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const before = appoint; - - appoint.topic = requestBody.topic; - appoint.updateUserId = request.user.sub; - appoint.updateFullName = request.user.name; - await this.appointDirectorRepository.delete({ appointId: id }); - const directors: any = await requestBody.persons.map((x: Person) => ({ - ...x, - appointId: id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - })); - await this.appointDirectorRepository.save(directors); - - await this.appointRepository.save(appoint, { data: request }); - setLogDataDiff(request, { before, after: appoint }); - - return new HttpSuccess(); } /** @@ -194,15 +245,24 @@ export class AppointController extends Controller { * */ @Delete("{id}") - public async deleteRole(@Path() id: string, @Request() request: RequestWithUser) { - await new permission().PermissionDelete(request, "SYS_PROBATION"); + public async deleteRole( + @Path() id: string, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionDelete(request, "SYS_PROBATION"); - await this.appointDirectorRepository.delete({ appointId: id }); + await this.appointDirectorRepository.delete({ appointId: id }); - const result = await this.appointRepository.delete({ id }); - if (!result) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + const result = await this.appointRepository.delete({ id }); + if (!result) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - return new HttpSuccess(); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -212,28 +272,37 @@ export class AppointController extends Controller { * */ @Get("/committee/{profileId}") - async GetCheckById(@Request() request: RequestWithUser, @Path() profileId: string) { - await new permission().PermissionGet(request, "SYS_PROBATION"); + async GetCheckById( + @Request() request: RequestWithUser, + @Path() profileId: string + ) { + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); - const directorId = await new CallAPI() - .GetData(request, "/org/profile/keycloak") - .catch((error) => { - console.error("Error calling API:", error); - }); + const directorId = await new CallAPI() + .GetData(request, "/org/profile/keycloak") + .catch((error) => { + console.error("Error calling API:", error); + }); - const appoint = await AppDataSource.getRepository(Appoint) - .createQueryBuilder("appoint") - .leftJoinAndSelect("appoint.directors", "directors") - .where( - "appoint.profileId = :profileId and directors.profileId = :directorId and directors.role = 'committee'", - { - directorId, - profileId, - }, - ) - .orderBy("appoint.createdAt", "DESC") - .getOne(); - const check = appoint ? true : false; - return new HttpSuccess(check); + const appoint = await AppDataSource.getRepository(Appoint) + .createQueryBuilder("appoint") + .leftJoinAndSelect("appoint.directors", "directors") + .where( + "appoint.profileId = :profileId and directors.profileId = :directorId and directors.role = 'committee'", + { + directorId, + profileId, + } + ) + .orderBy("appoint.createdAt", "DESC") + .getOne(); + const check = appoint ? true : false; + return new HttpSuccess(check); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } } diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index 9a34fa3..d2d9e26 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -91,160 +91,168 @@ export class AssignController extends Controller { @Request() request: RequestWithUser, @Body() requestBody: CreateAssign ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const person = await this.personalRepository.findOne({ - where: { - personal_id: requestBody.personalId, - }, - }); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + const person = await this.personalRepository.findOne({ + where: { + personal_id: requestBody.personalId, + }, + }); - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const roundNo = await this.assignRepository.count({ + where: { + active: 1, + personal_id: requestBody.personalId, + }, + }); + + const data: any = { + ...requestBody, + round_no: roundNo + 1, + personal_id: requestBody.personalId, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + other4_desc: requestBody.other4_desc ?? "", + other5_no1_desc: requestBody.other5_no1_desc ?? "", + other_desc: requestBody.other_desc ?? "", + }; + const before = null; + 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, + }) + ); + await this.assignJobRepository.save(jobs, { data: request }); + setLogDataDiff(request, { before, after: jobs }); + + const knowledges = await requestBody.assign_knowledges.map( + (x: CreateAssignKnowledge, index: number) => ({ + knowledge_level: x.level, + knowledge_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.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, + }) + ); + 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, + }) + ); + await this.assignSkillRepository.save(skills, { data: request }); + setLogDataDiff(request, { before, after: skills }); + + const competencise = await requestBody.assign_competency.map( + (x: CreateAssignCompetency, index: number) => ({ + competency_id: x.id, + competency_level: x.level, + competency_name: x.name, + competency_description: x.description, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignCompetencyRepository.save(competencise, { + data: request, + }); + setLogDataDiff(request, { before, after: competencise }); + + const competencyGroups = await requestBody.assign_competency_group.map( + (x: CreateAssignCompetencyGroup, index: number) => ({ + competency_group_id: x.id, + competency_group_level: x.level, + competency_group_name: x.name, + competency_group_description: x.description, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignCompetencyGroupRepository.save(competencyGroups, { + data: request, + }); + setLogDataDiff(request, { before, after: competencyGroups }); + + const outputs = await requestBody.assign_outputs.map( + (x: CreateAssignOutput, 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.assignOutputRepository.save(outputs, { data: request }); + setLogDataDiff(request, { before, after: outputs }); + + const directors = await requestBody.assign_director.map( + (x: CreateAssignDirector, index: number) => ({ + ...x, + assign_id: assign.id, + fullname: x.name, + ordering: index + 1, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignDirectorRepository.save(directors, { data: request }); + setLogDataDiff(request, { before, after: directors }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const roundNo = await this.assignRepository.count({ - where: { - active: 1, - personal_id: requestBody.personalId, - }, - }); - - const data: any = { - ...requestBody, - round_no: roundNo + 1, - personal_id: requestBody.personalId, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - other4_desc: requestBody.other4_desc ?? "", - other5_no1_desc: requestBody.other5_no1_desc ?? "", - other_desc: requestBody.other_desc ?? "", - }; - const before = null; - 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, - }) - ); - await this.assignJobRepository.save(jobs, { data: request }); - setLogDataDiff(request, { before, after: jobs }); - - const knowledges = await requestBody.assign_knowledges.map( - (x: CreateAssignKnowledge, index: number) => ({ - knowledge_level: x.level, - knowledge_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.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, - }) - ); - 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, - }) - ); - await this.assignSkillRepository.save(skills, { data: request }); - setLogDataDiff(request, { before, after: skills }); - - const competencise = await requestBody.assign_competency.map( - (x: CreateAssignCompetency, index: number) => ({ - competency_id: x.id, - competency_level: x.level, - competency_name: x.name, - competency_description: x.description, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignCompetencyRepository.save(competencise, { data: request }); - setLogDataDiff(request, { before, after: competencise }); - - const competencyGroups = await requestBody.assign_competency_group.map( - (x: CreateAssignCompetencyGroup, index: number) => ({ - competency_group_id: x.id, - competency_group_level: x.level, - competency_group_name: x.name, - competency_group_description: x.description, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignCompetencyGroupRepository.save(competencyGroups, { - data: request, - }); - setLogDataDiff(request, { before, after: competencyGroups }); - - const outputs = await requestBody.assign_outputs.map( - (x: CreateAssignOutput, 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.assignOutputRepository.save(outputs, { data: request }); - setLogDataDiff(request, { before, after: outputs }); - - const directors = await requestBody.assign_director.map( - (x: CreateAssignDirector, index: number) => ({ - ...x, - assign_id: assign.id, - fullname: x.name, - ordering: index + 1, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignDirectorRepository.save(directors, { data: request }); - setLogDataDiff(request, { before, after: directors }); - - return new HttpSuccess(); } /** @@ -259,220 +267,229 @@ export class AssignController extends Controller { @Request() request: RequestWithUser, @Body() requestBody: CreateAssign ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const assign = await this.assignRepository.findOne({ - where: { id: assign_id }, - }); - let before = assign; + const assign = await this.assignRepository.findOne({ + where: { id: assign_id }, + }); + let before = assign; - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const person = await this.personalRepository.findOne({ + where: { + personal_id: requestBody.personalId, + }, + }); + + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const data: any = { + ...requestBody, + id: assign_id, + updateUserId: request.user.sub, + updateFullName: request.user.name, + other4_desc: requestBody.other4_desc ?? "", + other5_no1_desc: requestBody.other5_no1_desc ?? "", + other_desc: requestBody.other_desc ?? "", + }; + + 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, + }) + ); + await this.assignJobRepository.save(jobs); + + await this.assignKnowledgeRepository.delete({ assign_id }); + const knowledges = await requestBody.assign_knowledges.map( + (x: CreateAssignKnowledge, index: number) => ({ + knowledge_level: x.level, + knowledge_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.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, + }) + ); + 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, + }) + ); + await this.assignSkillRepository.save(skills); + + await this.assignCompetencyRepository.delete({ assign_id }); + const competencise = await requestBody.assign_competency.map( + (x: CreateAssignCompetency, index: number) => ({ + competency_id: x.id, + competency_level: x.level, + competency_name: x.name, + competency_description: x.description, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignCompetencyRepository.save(competencise); + + await this.assignCompetencyGroupRepository.delete({ assign_id }); + const competencyGroups = await requestBody.assign_competency_group.map( + (x: CreateAssignCompetencyGroup, index: number) => ({ + competency_group_id: x.id, + competency_group_level: x.level, + competency_group_name: x.name, + competency_group_description: x.description, + assign_id: assign.id, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignCompetencyGroupRepository.save(competencyGroups); + + await this.assignOutputRepository.delete({ assign_id }); + const outputs = await requestBody.assign_outputs.map( + (x: CreateAssignOutput, 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.assignOutputRepository.save(outputs); + + await this.assignDirectorRepository.delete({ assign_id }); + const directors = await requestBody.assign_director.map( + (x: CreateAssignDirector, index: number) => ({ + ...x, + assign_id: assign.id, + fullname: x.name, + ordering: index + 1, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }) + ); + await this.assignDirectorRepository.save(directors); + + await this.assignRepository.save(data, { data: request }); + setLogDataDiff(request, { before, after: data }); + + // #noted cronjob + // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน + const dateSaveForm = await findEndDate(2, requestBody.date_start); + requestBody.assign_director + .filter((x) => x.role == "mentor" || x.role == "commander") + .map(async (director) => { + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, + body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, + receiverUserId: director.personal_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateSaveForm, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + }); + + // แจ้งผู้บังคับบัญชา และคณะกรรมการเข้ามาประเมินทุก 3 เดือน + const dateEvaluate = await findEndDate(3, requestBody.date_start); + requestBody.assign_director + .filter((x) => x.role == "commander" || x.role == "chairman") + .map(async (director) => { + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, + body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, + receiverUserId: director.personal_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateEvaluate, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + }); + + // แจ้งประธาน 6 เดือน + const dateResult = await findEndDate(6, requestBody.date_start); + requestBody.assign_director + .filter((x) => x.role == "chairman") + .map(async (director) => { + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดรายงานการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ ${requestBody.fullname}`, + body: `ถึงกำหนดรายงานการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ ${requestBody.fullname}`, + receiverUserId: director.personal_id, + payload: "", + isSendMail: true, + isSendInbox: true, + // isSendNotification: true + receiveDate: dateResult, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const person = await this.personalRepository.findOne({ - where: { - personal_id: requestBody.personalId, - }, - }); - - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - const data: any = { - ...requestBody, - id: assign_id, - updateUserId: request.user.sub, - updateFullName: request.user.name, - other4_desc: requestBody.other4_desc ?? "", - other5_no1_desc: requestBody.other5_no1_desc ?? "", - other_desc: requestBody.other_desc ?? "", - }; - - 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, - }) - ); - await this.assignJobRepository.save(jobs); - - await this.assignKnowledgeRepository.delete({ assign_id }); - const knowledges = await requestBody.assign_knowledges.map( - (x: CreateAssignKnowledge, index: number) => ({ - knowledge_level: x.level, - knowledge_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.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, - }) - ); - 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, - }) - ); - await this.assignSkillRepository.save(skills); - - await this.assignCompetencyRepository.delete({ assign_id }); - const competencise = await requestBody.assign_competency.map( - (x: CreateAssignCompetency, index: number) => ({ - competency_id: x.id, - competency_level: x.level, - competency_name: x.name, - competency_description: x.description, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignCompetencyRepository.save(competencise); - - await this.assignCompetencyGroupRepository.delete({ assign_id }); - const competencyGroups = await requestBody.assign_competency_group.map( - (x: CreateAssignCompetencyGroup, index: number) => ({ - competency_group_id: x.id, - competency_group_level: x.level, - competency_group_name: x.name, - competency_group_description: x.description, - assign_id: assign.id, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignCompetencyGroupRepository.save(competencyGroups); - - await this.assignOutputRepository.delete({ assign_id }); - const outputs = await requestBody.assign_outputs.map( - (x: CreateAssignOutput, 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.assignOutputRepository.save(outputs); - - await this.assignDirectorRepository.delete({ assign_id }); - const directors = await requestBody.assign_director.map( - (x: CreateAssignDirector, index: number) => ({ - ...x, - assign_id: assign.id, - fullname: x.name, - ordering: index + 1, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }) - ); - await this.assignDirectorRepository.save(directors); - - await this.assignRepository.save(data, { data: request }); - setLogDataDiff(request, { before, after: data }); - - // #noted cronjob - // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน - const dateSaveForm = await findEndDate(2, requestBody.date_start); - requestBody.assign_director - .filter((x) => x.role == "mentor" || x.role == "commander") - .map(async (director) => { - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, - body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, - receiverUserId: director.personal_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateSaveForm, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - }); - - // แจ้งผู้บังคับบัญชา และคณะกรรมการเข้ามาประเมินทุก 3 เดือน - const dateEvaluate = await findEndDate(3, requestBody.date_start); - requestBody.assign_director - .filter((x) => x.role == "commander" || x.role == "chairman") - .map(async (director) => { - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, - body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ 1 ${requestBody.fullname}`, - receiverUserId: director.personal_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateEvaluate, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - }); - - // แจ้งประธาน 6 เดือน - const dateResult = await findEndDate(6, requestBody.date_start); - requestBody.assign_director - .filter((x) => x.role == "chairman") - .map(async (director) => { - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดรายงานการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ ${requestBody.fullname}`, - body: `ถึงกำหนดรายงานการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ ${requestBody.fullname}`, - receiverUserId: director.personal_id, - payload: "", - isSendMail: true, - isSendInbox: true, - // isSendNotification: true - receiveDate: dateResult, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - }); - - return new HttpSuccess(); } /** @@ -486,60 +503,66 @@ export class AssignController extends Controller { @Request() request: RequestWithUser, @Query() personal_id: string ) { - let _workflow = await new permission().Workflow( - request, - personal_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); - const lists = await this.assignRepository.find({ - select: ["id", "round_no", "date_start", "date_finish"], - where: { personal_id }, - order: { round_no: "ASC" }, - }); + try { + let _workflow = await new permission().Workflow( + request, + personal_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); + const lists = await this.assignRepository.find({ + select: ["id", "round_no", "date_start", "date_finish"], + where: { personal_id }, + order: { round_no: "ASC" }, + }); - let result: any = []; + let result: any = []; - await Promise.all( - lists.map(async (item) => { - const director = await this.assignDirectorRepository.find({ - where: { assign_id: item.id }, - order: { ordering: "ASC" }, - }); + await Promise.all( + lists.map(async (item) => { + const director = await this.assignDirectorRepository.find({ + where: { assign_id: item.id }, + order: { ordering: "ASC" }, + }); - let mentors = ""; - const mentorList = await director.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 += ", "; + let mentors = ""; + const mentorList = await director.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 += ", "; + } } } - } - const commanderData = await (director.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : 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 chairman = chairmanData ? chairmanData.fullname : null; + const chairmanData = await (director.find( + (x) => x.role == "chairman" + ) ?? null); + const chairman = chairmanData ? chairmanData.fullname : null; - await result.push({ - ...item, - mentors: mentors, - commander: commander, - chairman: chairman, - }); - }) - ); + await result.push({ + ...item, + mentors: mentors, + commander: commander, + chairman: chairman, + }); + }) + ); - return new HttpSuccess(result); + return new HttpSuccess(result); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -553,53 +576,59 @@ export class AssignController extends Controller { @Request() request: RequestWithUser, @Query() personal_id: string ) { - const lists = await this.assignRepository.find({ - select: ["id", "round_no", "date_start", "date_finish"], - where: { personal_id }, - order: { round_no: "ASC" }, - }); + try { + const lists = await this.assignRepository.find({ + select: ["id", "round_no", "date_start", "date_finish"], + where: { personal_id }, + order: { round_no: "ASC" }, + }); - let result: any = []; + let result: any = []; - await Promise.all( - lists.map(async (item) => { - const director = await this.assignDirectorRepository.find({ - where: { assign_id: item.id }, - order: { ordering: "ASC" }, - }); + await Promise.all( + lists.map(async (item) => { + const director = await this.assignDirectorRepository.find({ + where: { assign_id: item.id }, + order: { ordering: "ASC" }, + }); - let mentors = ""; - const mentorList = await director.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 += ", "; + let mentors = ""; + const mentorList = await director.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 += ", "; + } } } - } - const commanderData = await (director.find( - (x) => x.role == "commander" - ) ?? null); - const commander = commanderData ? commanderData.fullname : 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 chairman = chairmanData ? chairmanData.fullname : null; + const chairmanData = await (director.find( + (x) => x.role == "chairman" + ) ?? null); + const chairman = chairmanData ? chairmanData.fullname : null; - await result.push({ - ...item, - mentors: mentors, - commander: commander, - chairman: chairman, - }); - }) - ); + await result.push({ + ...item, + mentors: mentors, + commander: commander, + chairman: chairman, + }); + }) + ); - return new HttpSuccess(result); + return new HttpSuccess(result); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -614,259 +643,268 @@ export class AssignController extends Controller { @Query() isReport: boolean = false, @Request() request: RequestWithUser ) { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + try { + let _workflow = await new permission().Workflow( + request, + assign_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - const assign = await this.assignRepository.findOne({ - select: [ - "id", - "personal_id", - "appointId", - "round_no", - "date_start", - "date_finish", - "other_desc", - "other4_desc", - "other5_no1_desc", - "experimenter_dated", - "active", - "createdAt", - "updatedAt", - "reportPersonId", - ], - where: { id: assign_id }, - }); - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const profileData = await this.personalRepository.findOne({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "positionName", - "positionLevelName", - "positionLineName", - "orgRootName", - "organization", - ], - where: { - personal_id: assign.personal_id, - }, - }); - - if (!profileData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - const splitOc = await profileData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const profile = { - ...profileData, - name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, - Position: profileData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: profileData.orgRootName, - PositionAndLevel: - profileData.positionName + profileData.positionLevelName, - }; - - const jobs = await this.assignJobRepository.find({ - select: ["id", "activity_desc", "goal_desc"], - where: { assign_id }, - }); - - const knowledgeData = await this.assignKnowledgeRepository.find({ - relations: ["knowledge"], - where: { assign_id }, - }); - const knowledges = await knowledgeData.map((x) => ({ - id: x.knowledge_id, - level: x.knowledge_level, - title: x.knowledge.title, - description: - x.knowledge_level == 1 - ? x.knowledge.level1 - : x.knowledge_level == 2 - ? x.knowledge.level2 - : x.knowledge_level == 3 - ? x.knowledge.level3 - : x.knowledge_level == 4 - ? x.knowledge.level4 - : x.knowledge_level == 5 - ? x.knowledge.level5 - : "", - })); - - const lawData = await this.lawsRepository.find({ - where: { active: 1 }, - }); - - const laws = await Promise.all( - lawData.map(async (x) => { - const assignLaw = await this.assignLawRepository.countBy({ - assign_id: assign_id, - law_id: x.id, - }); - - let description = await x.description; - if (isReport) { - const descriptionSplit = await x.description.split(" "); - description = await x.description.replace(descriptionSplit[0], ""); - } - - return { - id: x.id, - selected: assignLaw > 0 ? 1 : 0, - description: description, - status_select: x.status_select, - }; - }) - ); - - const skillsData = await this.assignSkillRepository.find({ - relations: ["skill"], - where: { assign_id }, - }); - - const skills = await skillsData.map((x) => ({ - id: x.skill_id, - level: x.skill_level, - title: x.skill.title, - description: - x.skill_level == 1 - ? x.skill.level1 - : x.skill_level == 2 - ? x.skill.level2 - : x.skill_level == 3 - ? x.skill.level3 - : x.skill_level == 4 - ? x.skill.level4 - : x.skill_level == 5 - ? x.skill.level5 - : "", - })); - - const competencyData = await this.assignCompetencyRepository.find({ - select: [ - "competency_id", - "competency_level", - "competency_name", - "competency_description", - ], - where: { assign_id }, - order: { createdAt: "ASC" }, - }); - - const competencys = await competencyData.map((x) => ({ - id: x.competency_id, - level: x.competency_level, - name: x.competency_name, - description: x.competency_description, - })); - - const competencyGroupData = await this.assignCompetencyGroupRepository.find( - { + const assign = await this.assignRepository.findOne({ select: [ - "competency_group_id", - "competency_group_level", - "competency_group_name", - "competency_group_description", + "id", + "personal_id", + "appointId", + "round_no", + "date_start", + "date_finish", + "other_desc", + "other4_desc", + "other5_no1_desc", + "experimenter_dated", + "active", + "createdAt", + "updatedAt", + "reportPersonId", + ], + where: { id: assign_id }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const profileData = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "positionLineName", + "orgRootName", + "organization", + ], + where: { + personal_id: assign.personal_id, + }, + }); + + if (!profileData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const splitOc = await profileData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const profile = { + ...profileData, + name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, + Position: profileData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: profileData.orgRootName, + PositionAndLevel: + profileData.positionName + profileData.positionLevelName, + }; + + const jobs = await this.assignJobRepository.find({ + select: ["id", "activity_desc", "goal_desc"], + where: { assign_id }, + }); + + const knowledgeData = await this.assignKnowledgeRepository.find({ + relations: ["knowledge"], + where: { assign_id }, + }); + const knowledges = await knowledgeData.map((x) => ({ + id: x.knowledge_id, + level: x.knowledge_level, + title: x.knowledge.title, + description: + x.knowledge_level == 1 + ? x.knowledge.level1 + : x.knowledge_level == 2 + ? x.knowledge.level2 + : x.knowledge_level == 3 + ? x.knowledge.level3 + : x.knowledge_level == 4 + ? x.knowledge.level4 + : x.knowledge_level == 5 + ? x.knowledge.level5 + : "", + })); + + const lawData = await this.lawsRepository.find({ + where: { active: 1 }, + }); + + const laws = await Promise.all( + lawData.map(async (x) => { + const assignLaw = await this.assignLawRepository.countBy({ + assign_id: assign_id, + law_id: x.id, + }); + + let description = await x.description; + if (isReport) { + const descriptionSplit = await x.description.split(" "); + description = await x.description.replace(descriptionSplit[0], ""); + } + + return { + id: x.id, + selected: assignLaw > 0 ? 1 : 0, + description: description, + status_select: x.status_select, + }; + }) + ); + + const skillsData = await this.assignSkillRepository.find({ + relations: ["skill"], + where: { assign_id }, + }); + + const skills = await skillsData.map((x) => ({ + id: x.skill_id, + level: x.skill_level, + title: x.skill.title, + description: + x.skill_level == 1 + ? x.skill.level1 + : x.skill_level == 2 + ? x.skill.level2 + : x.skill_level == 3 + ? x.skill.level3 + : x.skill_level == 4 + ? x.skill.level4 + : x.skill_level == 5 + ? x.skill.level5 + : "", + })); + + const competencyData = await this.assignCompetencyRepository.find({ + select: [ + "competency_id", + "competency_level", + "competency_name", + "competency_description", ], where: { assign_id }, order: { createdAt: "ASC" }, - } - ); - const competency_groups = await competencyGroupData.map((x) => ({ - id: x.competency_group_id, - level: x.competency_group_level, - name: x.competency_group_name, - description: x.competency_group_description, - })); + }); - const outputs = await this.assignOutputRepository.find({ - select: ["id", "output_desc", "indicator_desc"], - where: { assign_id }, - }); + const competencys = await competencyData.map((x) => ({ + id: x.competency_id, + level: x.competency_level, + name: x.competency_name, + description: x.competency_description, + })); - const director = await this.assignDirectorRepository.find({ - where: { assign_id }, - order: { ordering: "ASC" }, - }); - - let mentors = []; - const mentorList = await director.filter((x) => x.role == "mentor"); - if (mentorList.length > 0) { - for (let index = 0; index < mentorList.length; index++) { - const e = await mentorList[index]; - mentors.push({ - ...e, - name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), - Position: e.position + e.posLevel, // report + const competencyGroupData = + await this.assignCompetencyGroupRepository.find({ + select: [ + "competency_group_id", + "competency_group_level", + "competency_group_name", + "competency_group_description", + ], + where: { assign_id }, + order: { createdAt: "ASC" }, }); + const competency_groups = await competencyGroupData.map((x) => ({ + id: x.competency_group_id, + level: x.competency_group_level, + name: x.competency_group_name, + description: x.competency_group_description, + })); + + const outputs = await this.assignOutputRepository.find({ + select: ["id", "output_desc", "indicator_desc"], + where: { assign_id }, + }); + + const director = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); + + let mentors = []; + const mentorList = await director.filter((x) => x.role == "mentor"); + if (mentorList.length > 0) { + for (let index = 0; index < mentorList.length; index++) { + const e = await mentorList[index]; + mentors.push({ + ...e, + name: e.fullname, + label: + e.fullname + + " " + + (e.position ? `(${e.position}${e.posLevel})` : ""), + Position: e.position + e.posLevel, // report + }); + } } + + const commanderData = await (director.find( + (x) => x.role == "commander" + ) ?? null); + const commander = await (commanderData + ? { + ...commanderData, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}${commanderData.posLevel})` + : ""), + Position: commanderData.position + commanderData.posLevel, // report + } + : null); + + const chairmanData = await (director.find((x) => x.role == "chairman") ?? + null); + const chairman = await (chairmanData + ? { + ...chairmanData, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}${chairmanData.posLevel})` + : ""), + Position: chairmanData.position + chairmanData.posLevel, // report + } + : null); + + return new HttpSuccess({ + assign, + profile, + jobs, + knowledges, + laws, + skills, + competencys, + competency_groups, + outputs, + mentors, + commander, + chairman, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const commanderData = await (director.find((x) => x.role == "commander") ?? - null); - const commander = await (commanderData - ? { - ...commanderData, - name: commanderData.fullname, - label: - commanderData.fullname + - " " + - (commanderData.position - ? `(${commanderData.position}${commanderData.posLevel})` - : ""), - Position: commanderData.position + commanderData.posLevel, // report - } - : null); - - const chairmanData = await (director.find((x) => x.role == "chairman") ?? - null); - const chairman = await (chairmanData - ? { - ...chairmanData, - name: chairmanData.fullname, - label: - chairmanData.fullname + - " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), - Position: chairmanData.position + chairmanData.posLevel, // report - } - : null); - - return new HttpSuccess({ - assign, - profile, - jobs, - knowledges, - laws, - skills, - competencys, - competency_groups, - outputs, - mentors, - commander, - chairman, - }); } /** @@ -881,250 +919,259 @@ export class AssignController extends Controller { @Query() isReport: boolean = false, @Request() request: RequestWithUser ) { - const assign = await this.assignRepository.findOne({ - select: [ - "id", - "personal_id", - "appointId", - "round_no", - "date_start", - "date_finish", - "other_desc", - "other4_desc", - "other5_no1_desc", - "experimenter_dated", - "active", - "createdAt", - "updatedAt", - "reportPersonId", - ], - where: { id: assign_id }, - }); - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const profileData = await this.personalRepository.findOne({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "positionName", - "positionLevelName", - "positionLineName", - "orgRootName", - "organization", - ], - where: { - personal_id: assign.personal_id, - }, - }); - - if (!profileData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - const splitOc = await profileData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const profile = { - ...profileData, - name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, - Position: profileData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: profileData.orgRootName, - PositionAndLevel: - profileData.positionName + profileData.positionLevelName, - }; - - const jobs = await this.assignJobRepository.find({ - select: ["id", "activity_desc", "goal_desc"], - where: { assign_id }, - }); - - const knowledgeData = await this.assignKnowledgeRepository.find({ - relations: ["knowledge"], - where: { assign_id }, - }); - const knowledges = await knowledgeData.map((x) => ({ - id: x.knowledge_id, - level: x.knowledge_level, - title: x.knowledge.title, - description: - x.knowledge_level == 1 - ? x.knowledge.level1 - : x.knowledge_level == 2 - ? x.knowledge.level2 - : x.knowledge_level == 3 - ? x.knowledge.level3 - : x.knowledge_level == 4 - ? x.knowledge.level4 - : x.knowledge_level == 5 - ? x.knowledge.level5 - : "", - })); - - const lawData = await this.lawsRepository.find({ - where: { active: 1 }, - }); - - const laws = await Promise.all( - lawData.map(async (x) => { - const assignLaw = await this.assignLawRepository.countBy({ - assign_id: assign_id, - law_id: x.id, - }); - - let description = await x.description; - if (isReport) { - const descriptionSplit = await x.description.split(" "); - description = await x.description.replace(descriptionSplit[0], ""); - } - - return { - id: x.id, - selected: assignLaw > 0 ? 1 : 0, - description: description, - status_select: x.status_select, - }; - }) - ); - - const skillsData = await this.assignSkillRepository.find({ - relations: ["skill"], - where: { assign_id }, - }); - - const skills = await skillsData.map((x) => ({ - id: x.skill_id, - level: x.skill_level, - title: x.skill.title, - description: - x.skill_level == 1 - ? x.skill.level1 - : x.skill_level == 2 - ? x.skill.level2 - : x.skill_level == 3 - ? x.skill.level3 - : x.skill_level == 4 - ? x.skill.level4 - : x.skill_level == 5 - ? x.skill.level5 - : "", - })); - - const competencyData = await this.assignCompetencyRepository.find({ - select: [ - "competency_id", - "competency_level", - "competency_name", - "competency_description", - ], - where: { assign_id }, - order: { createdAt: "ASC" }, - }); - - const competencys = await competencyData.map((x) => ({ - id: x.competency_id, - level: x.competency_level, - name: x.competency_name, - description: x.competency_description, - })); - - const competencyGroupData = await this.assignCompetencyGroupRepository.find( - { + try { + const assign = await this.assignRepository.findOne({ select: [ - "competency_group_id", - "competency_group_level", - "competency_group_name", - "competency_group_description", + "id", + "personal_id", + "appointId", + "round_no", + "date_start", + "date_finish", + "other_desc", + "other4_desc", + "other5_no1_desc", + "experimenter_dated", + "active", + "createdAt", + "updatedAt", + "reportPersonId", + ], + where: { id: assign_id }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const profileData = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "positionLineName", + "orgRootName", + "organization", + ], + where: { + personal_id: assign.personal_id, + }, + }); + + if (!profileData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const splitOc = await profileData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const profile = { + ...profileData, + name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, + Position: profileData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: profileData.orgRootName, + PositionAndLevel: + profileData.positionName + profileData.positionLevelName, + }; + + const jobs = await this.assignJobRepository.find({ + select: ["id", "activity_desc", "goal_desc"], + where: { assign_id }, + }); + + const knowledgeData = await this.assignKnowledgeRepository.find({ + relations: ["knowledge"], + where: { assign_id }, + }); + const knowledges = await knowledgeData.map((x) => ({ + id: x.knowledge_id, + level: x.knowledge_level, + title: x.knowledge.title, + description: + x.knowledge_level == 1 + ? x.knowledge.level1 + : x.knowledge_level == 2 + ? x.knowledge.level2 + : x.knowledge_level == 3 + ? x.knowledge.level3 + : x.knowledge_level == 4 + ? x.knowledge.level4 + : x.knowledge_level == 5 + ? x.knowledge.level5 + : "", + })); + + const lawData = await this.lawsRepository.find({ + where: { active: 1 }, + }); + + const laws = await Promise.all( + lawData.map(async (x) => { + const assignLaw = await this.assignLawRepository.countBy({ + assign_id: assign_id, + law_id: x.id, + }); + + let description = await x.description; + if (isReport) { + const descriptionSplit = await x.description.split(" "); + description = await x.description.replace(descriptionSplit[0], ""); + } + + return { + id: x.id, + selected: assignLaw > 0 ? 1 : 0, + description: description, + status_select: x.status_select, + }; + }) + ); + + const skillsData = await this.assignSkillRepository.find({ + relations: ["skill"], + where: { assign_id }, + }); + + const skills = await skillsData.map((x) => ({ + id: x.skill_id, + level: x.skill_level, + title: x.skill.title, + description: + x.skill_level == 1 + ? x.skill.level1 + : x.skill_level == 2 + ? x.skill.level2 + : x.skill_level == 3 + ? x.skill.level3 + : x.skill_level == 4 + ? x.skill.level4 + : x.skill_level == 5 + ? x.skill.level5 + : "", + })); + + const competencyData = await this.assignCompetencyRepository.find({ + select: [ + "competency_id", + "competency_level", + "competency_name", + "competency_description", ], where: { assign_id }, order: { createdAt: "ASC" }, - } - ); - const competency_groups = await competencyGroupData.map((x) => ({ - id: x.competency_group_id, - level: x.competency_group_level, - name: x.competency_group_name, - description: x.competency_group_description, - })); + }); - const outputs = await this.assignOutputRepository.find({ - select: ["id", "output_desc", "indicator_desc"], - where: { assign_id }, - }); + const competencys = await competencyData.map((x) => ({ + id: x.competency_id, + level: x.competency_level, + name: x.competency_name, + description: x.competency_description, + })); - const director = await this.assignDirectorRepository.find({ - where: { assign_id }, - order: { ordering: "ASC" }, - }); - - let mentors = []; - const mentorList = await director.filter((x) => x.role == "mentor"); - if (mentorList.length > 0) { - for (let index = 0; index < mentorList.length; index++) { - const e = await mentorList[index]; - mentors.push({ - ...e, - name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), - Position: e.position + e.posLevel, // report + const competencyGroupData = + await this.assignCompetencyGroupRepository.find({ + select: [ + "competency_group_id", + "competency_group_level", + "competency_group_name", + "competency_group_description", + ], + where: { assign_id }, + order: { createdAt: "ASC" }, }); + const competency_groups = await competencyGroupData.map((x) => ({ + id: x.competency_group_id, + level: x.competency_group_level, + name: x.competency_group_name, + description: x.competency_group_description, + })); + + const outputs = await this.assignOutputRepository.find({ + select: ["id", "output_desc", "indicator_desc"], + where: { assign_id }, + }); + + const director = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); + + let mentors = []; + const mentorList = await director.filter((x) => x.role == "mentor"); + if (mentorList.length > 0) { + for (let index = 0; index < mentorList.length; index++) { + const e = await mentorList[index]; + mentors.push({ + ...e, + name: e.fullname, + label: + e.fullname + + " " + + (e.position ? `(${e.position}${e.posLevel})` : ""), + Position: e.position + e.posLevel, // report + }); + } } + + const commanderData = await (director.find( + (x) => x.role == "commander" + ) ?? null); + const commander = await (commanderData + ? { + ...commanderData, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}${commanderData.posLevel})` + : ""), + Position: commanderData.position + commanderData.posLevel, // report + } + : null); + + const chairmanData = await (director.find((x) => x.role == "chairman") ?? + null); + const chairman = await (chairmanData + ? { + ...chairmanData, + name: chairmanData.fullname, + label: + chairmanData.fullname + + " " + + (chairmanData.position + ? `(${chairmanData.position}${chairmanData.posLevel})` + : ""), + Position: chairmanData.position + chairmanData.posLevel, // report + } + : null); + + return new HttpSuccess({ + assign, + profile, + jobs, + knowledges, + laws, + skills, + competencys, + competency_groups, + outputs, + mentors, + commander, + chairman, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const commanderData = await (director.find((x) => x.role == "commander") ?? - null); - const commander = await (commanderData - ? { - ...commanderData, - name: commanderData.fullname, - label: - commanderData.fullname + - " " + - (commanderData.position - ? `(${commanderData.position}${commanderData.posLevel})` - : ""), - Position: commanderData.position + commanderData.posLevel, // report - } - : null); - - const chairmanData = await (director.find((x) => x.role == "chairman") ?? - null); - const chairman = await (chairmanData - ? { - ...chairmanData, - name: chairmanData.fullname, - label: - chairmanData.fullname + - " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), - Position: chairmanData.position + chairmanData.posLevel, // report - } - : null); - - return new HttpSuccess({ - assign, - profile, - jobs, - knowledges, - laws, - skills, - competencys, - competency_groups, - outputs, - mentors, - commander, - chairman, - }); } } diff --git a/src/controllers/AssignPermissionsController.ts b/src/controllers/AssignPermissionsController.ts index c749f5f..ef848ef 100644 --- a/src/controllers/AssignPermissionsController.ts +++ b/src/controllers/AssignPermissionsController.ts @@ -2,6 +2,8 @@ import { Controller, Route, Security, Tags, Request, Get, Path } from "tsoa"; import { RequestWithUser } from "../middlewares/user"; import { AppDataSource } from "../database/data-source"; import HttpSuccess from "../interfaces/http-success"; +import HttpError from "../interfaces/http-error"; +import HttpStatusCode from "../interfaces/http-status"; import CallAPI from "../interfaces/call-api"; import { AssignDirector } from "../entities/AssignDirector"; @@ -15,55 +17,65 @@ export class AssignPermissionsController extends Controller { private assignRepository = AppDataSource.getRepository(Assign); @Get("{id}") - async GetAssignPermissions(@Request() request: RequestWithUser, @Path() id: string) { - const director = await this.assignDirector.find({ - where: { assign_id: id }, - }); - - const personalId = await new CallAPI() - .GetData(request, "/org/profile/keycloak") - .catch((error) => { - console.error("Error calling API:", error); + async GetAssignPermissions( + @Request() request: RequestWithUser, + @Path() id: string + ) { + try { + const director = await this.assignDirector.find({ + where: { assign_id: id }, }); - const role = await director.find((e: any) => e.personal_id === personalId)?.role; + const personalId = await new CallAPI() + .GetData(request, "/org/profile/keycloak") + .catch((error) => { + console.error("Error calling API:", error); + }); - const reportPersonId = await this.assignRepository.findOneBy({ - id, - reportPersonId: personalId, - }); + const role = await director.find((e: any) => e.personal_id === personalId) + ?.role; - const response = { - tab1: { - isEdit: role === "commander", - isView: true, - }, - tab2: { - isEdit: role === "mentor", - isView: true, - }, - tab3: { - isEdit: role === "commander", - isView: role === "commander" || role === "chairman", - }, - tab4: { - isEdit: role === "commander", - isView: role === "commander" || role === "chairman", - }, - tab5: { - isEdit: Boolean(reportPersonId), - isView: true, - }, - tab6: { - isEdit: true, - isView: true, - }, - tab7: { - isEdit: false, - isView: true, - }, - }; + const reportPersonId = await this.assignRepository.findOneBy({ + id, + reportPersonId: personalId, + }); - return new HttpSuccess(response); + const response = { + tab1: { + isEdit: role === "commander", + isView: true, + }, + tab2: { + isEdit: role === "mentor", + isView: true, + }, + tab3: { + isEdit: role === "commander", + isView: role === "commander" || role === "chairman", + }, + tab4: { + isEdit: role === "commander", + isView: role === "commander" || role === "chairman", + }, + tab5: { + isEdit: Boolean(reportPersonId), + isView: true, + }, + tab6: { + isEdit: true, + isView: true, + }, + tab7: { + isEdit: false, + isView: true, + }, + }; + + return new HttpSuccess(response); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } } diff --git a/src/controllers/CalculateController.ts b/src/controllers/CalculateController.ts index 27ce24b..2edf5d2 100644 --- a/src/controllers/CalculateController.ts +++ b/src/controllers/CalculateController.ts @@ -1,32 +1,53 @@ -import { Controller, Route, Security, Tags, Request, SuccessResponse, Response, Get, Post, Body } from "tsoa" -import HttpSuccess from "../interfaces/http-success" -import HttpStatusCode from "../interfaces/http-status" -import { RequestWithUser } from "../middlewares/user" -import { findEndDate } from "../interfaces/utils" +import { + Controller, + Route, + Security, + Tags, + Request, + SuccessResponse, + Response, + Get, + Post, + Body, +} from "tsoa"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import HttpError from "../interfaces/http-error"; +import { RequestWithUser } from "../middlewares/user"; +import { findEndDate } from "../interfaces/utils"; @Route("api/v1/probation/calculate") @Tags("ฟอร์มมอบหมายงาน") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class CalculateController extends Controller { - /** - * API คำนวนวันสิ้นสุดตามวันที่เริ่มและระยะเวลาเดือนตามที่ส่งค่ามา - * - * @summary คำนวนวันสิ้นสุดตามวันที่เริ่มและระยะเวลาเดือนตามที่ส่งค่ามา - * - */ - @Post("assign-finish") - async AssignFinish( - @Body() - requestBody: { - month: number - start_date: Date - }, - @Request() request: RequestWithUser - ) { - const { month, start_date } = requestBody - const finish_date = findEndDate(month, start_date) + /** + * API คำนวนวันสิ้นสุดตามวันที่เริ่มและระยะเวลาเดือนตามที่ส่งค่ามา + * + * @summary คำนวนวันสิ้นสุดตามวันที่เริ่มและระยะเวลาเดือนตามที่ส่งค่ามา + * + */ + @Post("assign-finish") + async AssignFinish( + @Body() + requestBody: { + month: number; + start_date: Date; + }, + @Request() request: RequestWithUser + ) { + try { + const { month, start_date } = requestBody; + const finish_date = findEndDate(month, start_date); - return new HttpSuccess({ finish_date }) - } + return new HttpSuccess({ finish_date }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } } diff --git a/src/controllers/DataOptionsController.ts b/src/controllers/DataOptionsController.ts index 19ad7fe..44b9ff1 100644 --- a/src/controllers/DataOptionsController.ts +++ b/src/controllers/DataOptionsController.ts @@ -1,356 +1,432 @@ -import { Controller, Route, Security, Tags, Request, SuccessResponse, Response, Get, Query } 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 { Knowledge, TypeKnowledge } from "../entities/Knowledge" -import { Skill, TypeSkill } from "../entities/Skill" -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" +import { + Controller, + Route, + Security, + Tags, + Request, + SuccessResponse, + Response, + Get, + Query, +} 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 { Knowledge, TypeKnowledge } from "../entities/Knowledge"; +import { Skill, TypeSkill } from "../entities/Skill"; +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/probation/data-options") @Tags("Data Options") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class DataOptionController extends Controller { - private personalRepository = AppDataSource.getRepository(Personal) - private knowledgeRepository = AppDataSource.getRepository(Knowledge) - private mapKnowledgeSkillRepository = AppDataSource.getRepository(MapKnowledgeSkill) - private skillRepository = AppDataSource.getRepository(Skill) - private lawRepository = AppDataSource.getRepository(Law) - private assignRepository = AppDataSource.getRepository(Assign) + private personalRepository = AppDataSource.getRepository(Personal); + private knowledgeRepository = AppDataSource.getRepository(Knowledge); + private mapKnowledgeSkillRepository = + AppDataSource.getRepository(MapKnowledgeSkill); + private skillRepository = AppDataSource.getRepository(Skill); + private lawRepository = AppDataSource.getRepository(Law); + private assignRepository = AppDataSource.getRepository(Assign); - /** - * API list รายการความรู้ - * - * @summary options ความรู้ - * - */ - @Get("knowledge") - async GetKnowledge(@Query() personal_id: string) { - const person = await this.personalRepository.findOne({ - where: { personal_id }, - }) + /** + * API list รายการความรู้ + * + * @summary options ความรู้ + * + */ + @Get("knowledge") + async GetKnowledge(@Query() personal_id: string) { + try { + const person = await this.personalRepository.findOne({ + where: { personal_id }, + }); - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") - } + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } - let result = await this.mapKnowledgeSkillRepository.findOne({ - where: { - positionName: person.positionName, - positionLevelName: person.positionLevelName, - active: 1, - }, - }) + let result = await this.mapKnowledgeSkillRepository.findOne({ + where: { + positionName: person.positionName, + positionLevelName: person.positionLevelName, + active: 1, + }, + }); - if (!result) { - // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ - result = await this.mapKnowledgeSkillRepository.findOne({ - where: { - positionLevelName: person.positionLevelName, - active: 1, - }, - }) - } + if (!result) { + // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ + result = await this.mapKnowledgeSkillRepository.findOne({ + where: { + positionLevelName: person.positionLevelName, + active: 1, + }, + }); + } - if (!result) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง") - } + if (!result) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง" + ); + } - const knowledges = await this.knowledgeRepository.find({ - where: { type: TypeKnowledge.PERFORMANCE, active: 1 }, - }) + const knowledges = await this.knowledgeRepository.find({ + where: { type: TypeKnowledge.PERFORMANCE, active: 1 }, + }); - const knowledge = knowledges.map(knowledge => ({ - id: knowledge.id, - title: knowledge.title, - description: - result.knowlage_performance_level == 1 - ? knowledge.level1 - : result.knowlage_performance_level == 2 - ? knowledge.level2 - : result.knowlage_performance_level == 3 - ? knowledge.level3 - : result.knowlage_performance_level == 4 - ? knowledge.level4 - : knowledge.level5, - level: result.knowlage_performance_level, - })) + const knowledge = knowledges.map((knowledge) => ({ + id: knowledge.id, + title: knowledge.title, + description: + result.knowlage_performance_level == 1 + ? knowledge.level1 + : result.knowlage_performance_level == 2 + ? knowledge.level2 + : result.knowlage_performance_level == 3 + ? knowledge.level3 + : result.knowlage_performance_level == 4 + ? knowledge.level4 + : knowledge.level5, + level: result.knowlage_performance_level, + })); + return new HttpSuccess(knowledge); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - return new HttpSuccess(knowledge) - } + /** + * API ข้อมูลทักษะ + * + * @summary options ทักษะ + * + */ + @Get("skill") + async GetSkill(@Query() personal_id: string) { + try { + const person = await this.personalRepository.findOne({ + where: { personal_id }, + }); - /** - * API ข้อมูลทักษะ - * - * @summary options ทักษะ - * - */ - @Get("skill") - async GetSkill(@Query() personal_id: string) { - const person = await this.personalRepository.findOne({ - where: { personal_id }, - }) + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + let result = await this.mapKnowledgeSkillRepository.findOne({ + select: [ + "skill_computer_level", + "skill_english_level", + "skill_information_level", + "skill_resourse_level", + ], + where: { + positionName: person.positionName, + positionLevelName: person.positionLevelName, + active: 1, + }, + }); - let result = await this.mapKnowledgeSkillRepository.findOne({ - select: ["skill_computer_level", "skill_english_level", "skill_information_level", "skill_resourse_level"], - where: { - positionName: person.positionName, - positionLevelName: person.positionLevelName, - active: 1, - }, - }) + if (!result) { + // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ + result = await this.mapKnowledgeSkillRepository.findOne({ + select: [ + "skill_computer_level", + "skill_english_level", + "skill_information_level", + "skill_resourse_level", + ], + where: { + positionLevelName: person.positionLevelName, + active: 1, + }, + }); + } - if (!result) { - // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ - result = await this.mapKnowledgeSkillRepository.findOne({ - select: ["skill_computer_level", "skill_english_level", "skill_information_level", "skill_resourse_level"], - where: { - positionLevelName: person.positionLevelName, - active: 1, - }, - }) - } + if (!result) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง" + ); + } - if (!result) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง") - } + const computerData = await this.skillRepository.findOne({ + where: { type: TypeSkill.COMPUTER, active: 1 }, + }); - const computerData = await this.skillRepository.findOne({ - where: { type: TypeSkill.COMPUTER, active: 1 }, - }) + 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, + }; - 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 englishData = await this.skillRepository.findOne({ - where: { type: TypeSkill.ENG, active: 1 }, - }) + if (!englishData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลทักษะภาษาอังกฤษ" + ); + } - if (!englishData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะภาษาอังกฤษ") - } + const english = await { + id: englishData.id, + title: englishData.title, + level_description: + result.skill_english_level == 1 + ? englishData.level1 + : result.skill_english_level == 2 + ? englishData.level2 + : result.skill_english_level == 3 + ? englishData.level3 + : result.skill_english_level == 4 + ? englishData.level4 + : englishData.level5, + level: result.skill_english_level, + }; - const english = await { - id: englishData.id, - title: englishData.title, - level_description: - result.skill_english_level == 1 - ? englishData.level1 - : result.skill_english_level == 2 - ? englishData.level2 - : result.skill_english_level == 3 - ? englishData.level3 - : result.skill_english_level == 4 - ? englishData.level4 - : englishData.level5, - level: result.skill_english_level, - } + const informationData = await this.skillRepository.findOne({ + where: { type: TypeSkill.INFORMATION, active: 1 }, + }); - const informationData = await this.skillRepository.findOne({ - where: { type: TypeSkill.INFORMATION, active: 1 }, - }) + if (!informationData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - if (!informationData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + const information = await { + id: informationData.id, + title: informationData.title, + level_description: + result.skill_information_level == 1 + ? informationData.level1 + : result.skill_information_level == 2 + ? informationData.level2 + : result.skill_information_level == 3 + ? informationData.level3 + : result.skill_information_level == 4 + ? informationData.level4 + : informationData.level5, + level: result.skill_information_level, + }; - const information = await { - id: informationData.id, - title: informationData.title, - level_description: - result.skill_information_level == 1 - ? informationData.level1 - : result.skill_information_level == 2 - ? informationData.level2 - : result.skill_information_level == 3 - ? informationData.level3 - : result.skill_information_level == 4 - ? informationData.level4 - : informationData.level5, - level: result.skill_information_level, - } + const resourseData = await this.skillRepository.findOne({ + where: { type: TypeSkill.RESOURSE, active: 1 }, + }); + if (!resourseData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - const resourseData = await this.skillRepository.findOne({ - where: { type: TypeSkill.RESOURSE, active: 1 }, - }) - if (!resourseData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + const resourse = await { + id: resourseData.id, + title: resourseData.title, + level_description: + result.skill_resourse_level == 1 + ? resourseData.level1 + : result.skill_resourse_level == 2 + ? resourseData.level2 + : result.skill_resourse_level == 3 + ? resourseData.level3 + : result.skill_resourse_level == 4 + ? resourseData.level4 + : resourseData.level5, + level: result.skill_resourse_level, + }; - const resourse = await { - id: resourseData.id, - title: resourseData.title, - level_description: - result.skill_resourse_level == 1 - ? resourseData.level1 - : result.skill_resourse_level == 2 - ? resourseData.level2 - : result.skill_resourse_level == 3 - ? resourseData.level3 - : result.skill_resourse_level == 4 - ? resourseData.level4 - : resourseData.level5, - level: result.skill_resourse_level, - } + return new HttpSuccess({ + computer, + english, + information, + resourse, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - return new HttpSuccess({ - computer, - english, - information, - resourse, - }) - } + /** + * API list รายการกฎหมาย + * + * @summary options กฎหมาย + * + */ + @Get("law") + async GetLaw(@Query() personal_id: string) { + try { + const results = await this.lawRepository.find({ + select: ["id", "parent_id", "description", "status_select"], + where: { + active: 1, + }, + }); - /** - * API list รายการกฎหมาย - * - * @summary options กฎหมาย - * - */ - @Get("law") - async GetLaw(@Query() personal_id: string) { - const results = await this.lawRepository.find({ - select: ["id", "parent_id", "description", "status_select"], - where: { - active: 1, - }, - }) + if (!results) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - if (!results) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + const result = await results.map((v) => ({ + ...v, + checked: 0, + })); - const result = await results.map(v => ({ - ...v, - checked: 0, - })) + return new HttpSuccess(result); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - return new HttpSuccess(result) - } + /** + * API ดึงข้อมูลจำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง + * + * @summary จำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง + * + */ + @Get("new-assign") + async NewAssign( + @Query() personal_id: string, + @Request() request: RequestWithUser + ) { + try { + let _workflow = await new permission().Workflow( + request, + personal_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - /** - * API ดึงข้อมูลจำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง - * - * @summary จำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง - * - */ - @Get("new-assign") - async NewAssign(@Query() personal_id: string, @Request() request: RequestWithUser) { - let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION") - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION") + const person = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "posNo", + "positionName", + "positionLevelName", + "positionLineName", + "isProbation", + "orgRootName", + "organization", + "createdAt", + "updatedAt", + ], + where: { personal_id }, + }); - const person = await this.personalRepository.findOne({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "posNo", - "positionName", - "positionLevelName", - "positionLineName", - "isProbation", - "orgRootName", - "organization", - "createdAt", - "updatedAt", - ], - where: { personal_id }, - }) + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + const assign = await this.assignRepository.count({ + where: { + personal_id, + }, + }); - const assign = await this.assignRepository.count({ - where: { - personal_id, - }, - }) + const responsePerson = { + id: person.personal_id, + ...person, + }; - const responsePerson = { - id: person.personal_id, - ...person, - } + return new HttpSuccess({ + person: responsePerson, + assign_no: assign + 1, + assign_month: 6, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + /** + * API ดึงข้อมูลจำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง (USER) + * + * @summary จำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง (USER) + * + */ + @Get("new-assign-user") + async NewAssignUser( + @Query() personal_id: string, + @Request() request: RequestWithUser + ) { + try { + const person = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "posNo", + "positionName", + "positionLevelName", + "positionLineName", + "isProbation", + "orgRootName", + "organization", + "createdAt", + "updatedAt", + ], + where: { personal_id }, + }); - return new HttpSuccess({ - person: responsePerson, - assign_no: assign + 1, - assign_month: 6, - }) - } - /** - * API ดึงข้อมูลจำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง (USER) - * - * @summary จำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง (USER) - * - */ - @Get("new-assign-user") - async NewAssignUser(@Query() personal_id: string, @Request() request: RequestWithUser) { - const person = await this.personalRepository.findOne({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "posNo", - "positionName", - "positionLevelName", - "positionLineName", - "isProbation", - "orgRootName", - "organization", - "createdAt", - "updatedAt", - ], - where: { personal_id }, - }) + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } + const assign = await this.assignRepository.count({ + where: { + personal_id, + }, + }); - const assign = await this.assignRepository.count({ - where: { - personal_id, - }, - }) + const responsePerson = { + id: person.personal_id, + ...person, + }; - const responsePerson = { - id: person.personal_id, - ...person, - } - - return new HttpSuccess({ - person: responsePerson, - assign_no: assign + 1, - assign_month: 6, - }) - } + return new HttpSuccess({ + person: responsePerson, + assign_no: assign + 1, + assign_month: 6, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } } diff --git a/src/controllers/EvaluateChairmanController.ts b/src/controllers/EvaluateChairmanController.ts index 6634c69..2e2a208 100644 --- a/src/controllers/EvaluateChairmanController.ts +++ b/src/controllers/EvaluateChairmanController.ts @@ -53,145 +53,154 @@ export class EvaluateChairmanController extends Controller { @Query() assign_id: string, @Request() request: RequestWithUser ) { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); - - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { + try { + let _workflow = await new permission().Workflow( + request, assign_id, - role: "chairman", - }, - }); - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); - } - const director_id = director.personal_id; - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const profile = await (assign.profile - ? { - ...assign.profile, - id: assign.profile.personal_id, - name: - assign.profile.prefixName + - assign.profile.firstName + - " " + - assign.profile.lastName, - Oc: assign.profile.organization, - } - : null); - - const evaluate_amount = await this.evaluateChairmanRepository.count({ - where: { - assign_id, - director_id, - }, - }); - const evaluate_no = await (evaluate_amount + 1); - const start_date = - evaluate_amount == 0 - ? assign.date_start - : findEndDate(evaluate_amount * 3, assign.date_start); - - const directorData = await this.assignDirectorRepository.find({ - where: { assign_id }, - order: { ordering: "ASC" }, - }); - - if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" + "SYS_PROBATION" ); - } + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - 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.push({ - personal_id: e.personal_id, - dated: e.dated, - name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), - position: e.position, - posType: e.posType, - posLevel: e.posLevel, - }); + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "chairman", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const profile = await (assign.profile + ? { + ...assign.profile, + id: assign.profile.personal_id, + name: + assign.profile.prefixName + + assign.profile.firstName + + " " + + assign.profile.lastName, + Oc: assign.profile.organization, + } + : null); + + const evaluate_amount = await this.evaluateChairmanRepository.count({ + where: { + assign_id, + director_id, + }, + }); + const evaluate_no = await (evaluate_amount + 1); + const start_date = + evaluate_amount == 0 + ? assign.date_start + : findEndDate(evaluate_amount * 3, assign.date_start); + + const directorData = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); + + if (!directorData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" + ); + } + + 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.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + + " " + + (e.position ? `(${e.position}${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); + } + } + + const commanderData = await (directorData.find( + (x) => x.role == "commander" + ) ?? null); + + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}${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.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; + + return new HttpSuccess({ + person: profile ? profile : null, + assign, + evaluate_no: evaluate_no, + start_date: start_date, + end_date: findEndDate(3, start_date), + commander, + mentors, + chairman, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - - const commander = - commanderData != null - ? { - personal_id: commanderData.personal_id, - dated: commanderData.dated, - name: commanderData.fullname, - label: - commanderData.fullname + - " " + - (commanderData.position - ? `(${commanderData.position}${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.posLevel})` - : ""), - position: chairmanData.position, - posType: chairmanData.posType, - posLevel: chairmanData.posLevel, - } - : null; - - return new HttpSuccess({ - person: profile ? profile : null, - assign, - evaluate_no: evaluate_no, - start_date: start_date, - end_date: findEndDate(3, start_date), - commander, - mentors, - chairman, - }); } /** @@ -206,157 +215,166 @@ export class EvaluateChairmanController extends Controller { @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"], - where: { - assign_id, - role: "chairman", - }, - }); - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); - } - const director_id = director.personal_id; - let evaluate: any = null; - if (evaluate_no) { - evaluate = await this.evaluateChairmanRepository.findOne({ + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); + // ต้องปรับเป็น id ของคนที่ access เข้ามา + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], where: { - director_id, assign_id, - no: evaluate_no, + role: "chairman", }, }); - } else { - 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) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); - } - - const assign = await this.assignRepository.findOne({ - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const experimenteeData = await this.personalRepository.find({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "positionName", - "positionLevelName", - "organization", - ], - where: { personal_id: assign.personal_id }, - }); - - const experimentee = await experimenteeData.map((element) => ({ - ...element, - name: element.prefixName + element.firstName + " " + element.lastName, - Oc: element.organization, - })); - - const directorData = await this.assignDirectorRepository.find({ - where: { assign_id }, - order: { ordering: "ASC" }, - }); - - if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); - } - - 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.push({ - personal_id: e.personal_id, - dated: e.dated, - name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), - position: e.position, - posType: e.posType, - posLevel: e.posLevel, - }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } + const director_id = director.personal_id; + let evaluate: any = null; + if (evaluate_no) { + evaluate = await this.evaluateChairmanRepository.findOne({ + where: { + director_id, + assign_id, + no: evaluate_no, + }, + }); + } else { + 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) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + } + + const assign = await this.assignRepository.findOne({ + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const experimenteeData = await this.personalRepository.find({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { personal_id: assign.personal_id }, + }); + + const experimentee = await experimenteeData.map((element) => ({ + ...element, + name: element.prefixName + element.firstName + " " + element.lastName, + Oc: element.organization, + })); + + const directorData = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); + + if (!directorData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" + ); + } + + 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.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + + " " + + (e.position ? `(${e.position}${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, + }); + } + } + + const commanderData = await (directorData.find( + (x) => x.role == "commander" + ) ?? null); + + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}${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.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; + + return new HttpSuccess({ + experimentee: experimentee, + mentors: mentors, + commander: commander, + chairman: chairman, + assign, + evaluate, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); - - const commander = - commanderData != null - ? { - personal_id: commanderData.personal_id, - dated: commanderData.dated, - name: commanderData.fullname, - label: - commanderData.fullname + - " " + - (commanderData.position - ? `(${commanderData.position}${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.posLevel})` - : ""), - position: chairmanData.position, - posType: chairmanData.posType, - posLevel: chairmanData.posLevel, - } - : null; - - return new HttpSuccess({ - experimentee: experimentee, - mentors: mentors, - commander: commander, - chairman: chairman, - assign, - evaluate, - }); } /** @@ -371,81 +389,90 @@ export class EvaluateChairmanController extends Controller { @Body() requestBody: CreateEvaluateChairman, @Request() request: RequestWithUser ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "chairman", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const postData: any = await { assign_id, - role: "chairman", - }, - }); - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); - } + ...requestBody, + director_id, + no: requestBody.evaluate_no, + date_start: requestBody.start_date, + personal_id: assign.personal_id, - const director_id = director.personal_id; - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const postData: any = await { - assign_id, - ...requestBody, - director_id, - no: requestBody.evaluate_no, - date_start: requestBody.start_date, - personal_id: assign.personal_id, - - achievement_other_desc: requestBody.achievement_other - ? requestBody.achievement_other.text - : "", - achievement_other_level: requestBody.achievement_other - ? Number(requestBody.achievement_other.level) - : 0, - behavior_other_desc: requestBody.behavior_orther.text, - behavior_other_level: - requestBody.behavior_orther.text != "" - ? Number(requestBody.behavior_orther.level) + achievement_other_desc: requestBody.achievement_other + ? requestBody.achievement_other.text + : "", + achievement_other_level: requestBody.achievement_other + ? Number(requestBody.achievement_other.level) : 0, + behavior_other_desc: requestBody.behavior_orther.text, + behavior_other_level: + requestBody.behavior_orther.text != "" + ? Number(requestBody.behavior_orther.level) + : 0, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }; + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; - await this.evaluateChairmanRepository.save(postData, { - data: request, - }); - setLogDataDiff(request, { before: null, after: postData }); + await this.evaluateChairmanRepository.save(postData, { + data: request, + }); + setLogDataDiff(request, { before: null, after: postData }); - if (Number(requestBody.evaluate_no) < 2) { - // #noted cronjob - // แจ้งประธานเข้ามาบันทึกผลทุก 3 เดือน 2 ครั้ง - var dateSend = await findEndDate(3, requestBody.start_date); - const nextNo = await (Number(requestBody.evaluate_no) + 1); - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการ (สำหรับคณะกรรมการ) ครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - receiverUserId: director_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateSend, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); + if (Number(requestBody.evaluate_no) < 2) { + // #noted cronjob + // แจ้งประธานเข้ามาบันทึกผลทุก 3 เดือน 2 ครั้ง + var dateSend = await findEndDate(3, requestBody.start_date); + const nextNo = await (Number(requestBody.evaluate_no) + 1); + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการ (สำหรับคณะกรรมการ) ครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + receiverUserId: director_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateSend, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - return new HttpSuccess(); } /** @@ -461,83 +488,90 @@ export class EvaluateChairmanController extends Controller { @Body() requestBody: CreateEvaluateChairman, @Request() request: RequestWithUser ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - let evaluate = await this.evaluateChairmanRepository.findOne({ - where: { id: evaluate_id }, - }); + let evaluate = await this.evaluateChairmanRepository.findOne({ + where: { id: evaluate_id }, + }); - const before = evaluate; + const before = evaluate; - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + } + + evaluate.chairman_dated = requestBody.chairman_dated; + evaluate.director1_dated = requestBody.director1_dated; + evaluate.director2_dated = requestBody.director2_dated; + evaluate.knowledge_level = requestBody.knowledge_level; + evaluate.apply_level = requestBody.apply_level; + evaluate.success_level = requestBody.success_level; + evaluate.achievement_other_desc = requestBody.achievement_other + ? requestBody.achievement_other.text + : ""; + evaluate.achievement_other_level = + requestBody.achievement_other.text != "" + ? Number(requestBody.achievement_other.level) + : 0; + + evaluate.conduct1_level = requestBody.conduct1_level; + evaluate.conduct2_level = requestBody.conduct2_level; + evaluate.conduct3_level = requestBody.conduct3_level; + evaluate.conduct4_level = requestBody.conduct4_level; + evaluate.moral1_level = requestBody.moral1_level; + evaluate.moral2_level = requestBody.moral2_level; + evaluate.moral3_level = requestBody.moral3_level; + evaluate.discipline1_level = requestBody.discipline1_level; + evaluate.discipline2_level = requestBody.discipline2_level; + evaluate.discipline3_level = requestBody.discipline3_level; + evaluate.discipline4_level = requestBody.discipline4_level; + 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; + 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_result = requestBody.develop_result; + evaluate.achievement_score = requestBody.achievement_score; + evaluate.achievement_score_total = requestBody.achievement_score_total; + evaluate.achievement_percent = requestBody.achievement_percent; + evaluate.achievement_result = requestBody.achievement_result; + evaluate.behavior_score = requestBody.behavior_score; + evaluate.behavior_score_total = requestBody.behavior_score_total; + evaluate.behavior_percent = requestBody.behavior_percent; + evaluate.behavior_result = requestBody.behavior_result; + evaluate.sum_score = requestBody.sum_score; + evaluate.sum_percent = requestBody.sum_percent; + evaluate.evaluate_result = requestBody.evaluate_result; + + evaluate.updateUserId = request.user.sub; + evaluate.updateFullName = request.user.name; + + await this.evaluateChairmanRepository.save(evaluate, { data: request }); + setLogDataDiff(request, { before, after: evaluate }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - evaluate.chairman_dated = requestBody.chairman_dated; - evaluate.director1_dated = requestBody.director1_dated; - evaluate.director2_dated = requestBody.director2_dated; - evaluate.knowledge_level = requestBody.knowledge_level; - evaluate.apply_level = requestBody.apply_level; - evaluate.success_level = requestBody.success_level; - evaluate.achievement_other_desc = requestBody.achievement_other - ? requestBody.achievement_other.text - : ""; - evaluate.achievement_other_level = - requestBody.achievement_other.text != "" - ? Number(requestBody.achievement_other.level) - : 0; - - evaluate.conduct1_level = requestBody.conduct1_level; - evaluate.conduct2_level = requestBody.conduct2_level; - evaluate.conduct3_level = requestBody.conduct3_level; - evaluate.conduct4_level = requestBody.conduct4_level; - evaluate.moral1_level = requestBody.moral1_level; - evaluate.moral2_level = requestBody.moral2_level; - evaluate.moral3_level = requestBody.moral3_level; - evaluate.discipline1_level = requestBody.discipline1_level; - evaluate.discipline2_level = requestBody.discipline2_level; - evaluate.discipline3_level = requestBody.discipline3_level; - evaluate.discipline4_level = requestBody.discipline4_level; - 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; - 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_result = requestBody.develop_result; - evaluate.achievement_score = requestBody.achievement_score; - evaluate.achievement_score_total = requestBody.achievement_score_total; - evaluate.achievement_percent = requestBody.achievement_percent; - evaluate.achievement_result = requestBody.achievement_result; - evaluate.behavior_score = requestBody.behavior_score; - evaluate.behavior_score_total = requestBody.behavior_score_total; - evaluate.behavior_percent = requestBody.behavior_percent; - evaluate.behavior_result = requestBody.behavior_result; - evaluate.sum_score = requestBody.sum_score; - evaluate.sum_percent = requestBody.sum_percent; - evaluate.evaluate_result = requestBody.evaluate_result; - - evaluate.updateUserId = request.user.sub; - evaluate.updateFullName = request.user.name; - - await this.evaluateChairmanRepository.save(evaluate, { data: request }); - setLogDataDiff(request, { before, after: evaluate }); - - return new HttpSuccess(); } } diff --git a/src/controllers/EvaluateController.ts b/src/controllers/EvaluateController.ts index 26c675b..63fba47 100644 --- a/src/controllers/EvaluateController.ts +++ b/src/controllers/EvaluateController.ts @@ -1,349 +1,466 @@ -import { Controller, Route, Security, Tags, Request, SuccessResponse, Response, Get, Post, Body, Query, Put } from "tsoa" -import HttpSuccess from "../interfaces/http-success" -import HttpStatusCode from "../interfaces/http-status" -import { RequestWithUser } from "../middlewares/user" -import { findEndDate, setLogDataDiff } from "../interfaces/utils" -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 permission from "../interfaces/permission" +import { + Controller, + Route, + Security, + Tags, + Request, + SuccessResponse, + Response, + Get, + Post, + Body, + Query, + Put, +} from "tsoa"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import { RequestWithUser } from "../middlewares/user"; +import { findEndDate, setLogDataDiff } from "../interfaces/utils"; +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 permission from "../interfaces/permission"; @Route("api/v1/probation/evaluate") @Tags("แบบประเมินผล (ผู้บังคับบัญชา)") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class EvaluateController extends Controller { - private assignDirectorRepository = AppDataSource.getRepository(AssignDirector) - private assignRepository = AppDataSource.getRepository(Assign) - private evaluateCommanderRepository = AppDataSource.getRepository(EvaluateCommander) - private personalRepository = AppDataSource.getRepository(Personal) + private assignDirectorRepository = + AppDataSource.getRepository(AssignDirector); + private assignRepository = AppDataSource.getRepository(Assign); + private evaluateCommanderRepository = + AppDataSource.getRepository(EvaluateCommander); + private personalRepository = AppDataSource.getRepository(Personal); - /** - * API ข้อมูลตอนกดสร้างแบบประเมินผล (ผู้บังคับบัญชา) - * - * @summary ข้อมูลตอนกดสร้างแบบประเมินผล (ผู้บังคับบัญชา) - * - */ - @Get("create") - async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { - let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION") - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION") + /** + * API ข้อมูลตอนกดสร้างแบบประเมินผล (ผู้บังคับบัญชา) + * + * @summary ข้อมูลตอนกดสร้างแบบประเมินผล (ผู้บังคับบัญชา) + * + */ + @Get("create") + async CreateEvaluate( + @Query() assign_id: string, + @Request() request: RequestWithUser + ) { + try { + let _workflow = await new permission().Workflow( + request, + assign_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - const director_id = director.personal_id + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + const director_id = director.personal_id; - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } - const profile = await (assign.profile - ? { - ...assign.profile, - id: assign.profile.personal_id, - name: assign.profile.prefixName + assign.profile.firstName + " " + assign.profile.lastName, - Oc: assign.profile.organization, - } - : null) + const profile = await (assign.profile + ? { + ...assign.profile, + id: assign.profile.personal_id, + name: + assign.profile.prefixName + + assign.profile.firstName + + " " + + assign.profile.lastName, + Oc: assign.profile.organization, + } + : null); - const evaluate_amount = await this.evaluateCommanderRepository.count({ - where: { - assign_id, - director_id, - }, - }) - const evaluate_no = await (evaluate_amount + 1) - const start_date = evaluate_amount == 0 ? assign.date_start : findEndDate(evaluate_amount * 3, assign.date_start) + const evaluate_amount = await this.evaluateCommanderRepository.count({ + where: { + assign_id, + director_id, + }, + }); + const evaluate_no = await (evaluate_amount + 1); + const start_date = + evaluate_amount == 0 + ? assign.date_start + : findEndDate(evaluate_amount * 3, assign.date_start); - const commanderData = await this.assignDirectorRepository.findOne({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { personal_id: director_id }, - }) - if (!commanderData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา") - } - const commander = await { - ...commanderData, - name: commanderData.fullname, - label: `${commanderData.fullname} (${commanderData.position}${commanderData.posLevel})`, - } + const commanderData = await this.assignDirectorRepository.findOne({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { personal_id: director_id }, + }); + if (!commanderData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้บังคับบัญชา" + ); + } + const commander = await { + ...commanderData, + name: commanderData.fullname, + label: `${commanderData.fullname} (${commanderData.position}${commanderData.posLevel})`, + }; - return new HttpSuccess({ - person: profile, - assign, - evaluate_no: evaluate_no, - start_date: start_date, - end_date: findEndDate(3, start_date), - director: commander, - }) - } + return new HttpSuccess({ + person: profile, + assign, + evaluate_no: evaluate_no, + start_date: start_date, + end_date: findEndDate(3, start_date), + director: commander, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - * @summary ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - */ - @Get("") - async GetEvaluate(@Request() request: RequestWithUser, @Query() assign_id: string, @Query() evaluate_no?: string) { - await new permission().PermissionGet(request, "SYS_PROBATION") + /** + * API ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + * @summary ข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + */ + @Get("") + async GetEvaluate( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string + ) { + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); - // ต้องปรับเป็น id ของคนที่ access เข้ามา - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - const director_id = director.personal_id - let evaluate: any = null - if (evaluate_no) { - evaluate = await this.evaluateCommanderRepository.findOne({ - where: { - director_id, - assign_id, - no: evaluate_no, - }, - }) - } else { - evaluate = await this.evaluateCommanderRepository.find({ - where: { - director_id, - assign_id, - }, - }) + // ต้องปรับเป็น id ของคนที่ access เข้ามา + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + const director_id = director.personal_id; + let evaluate: any = null; + if (evaluate_no) { + evaluate = await this.evaluateCommanderRepository.findOne({ + where: { + director_id, + assign_id, + no: evaluate_no, + }, + }); + } else { + 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) + evaluate = await evaluate.map((element: EvaluateCommander) => ({ + ...element, + no: Number(element.no), + })); + } - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน") - } + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน"); + } - const assign = await this.assignRepository.findOne({ - where: { id: assign_id }, - }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } + const assign = await this.assignRepository.findOne({ + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } - // const profile = await (assign.profile - // ? { - // ...assign.profile, - // id: assign.profile.personal_id, - // name: - // assign.profile.prefixName + - // assign.profile.firstName + - // " " + - // assign.profile.lastName, - // Oc: assign.profile.organization, - // } - // : null); + // const profile = await (assign.profile + // ? { + // ...assign.profile, + // id: assign.profile.personal_id, + // name: + // assign.profile.prefixName + + // assign.profile.firstName + + // " " + + // assign.profile.lastName, + // Oc: assign.profile.organization, + // } + // : null); - // const evaluate_amount = await this.evaluateCommanderRepository.count({ - // where: { - // assign_id, - // director_id, - // }, - // }); - // const evaluate_no = await (evaluate_amount + 1); - // const start_date = - // evaluate_amount == 0 - // ? assign.date_start - // : findEndDate(evaluate_amount * 3, assign.date_start); + // const evaluate_amount = await this.evaluateCommanderRepository.count({ + // where: { + // assign_id, + // director_id, + // }, + // }); + // const evaluate_no = await (evaluate_amount + 1); + // const start_date = + // evaluate_amount == 0 + // ? assign.date_start + // : findEndDate(evaluate_amount * 3, assign.date_start); - const directorData = await this.assignDirectorRepository.find({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { personal_id: director_id }, - }) + const directorData = await this.assignDirectorRepository.find({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { personal_id: director_id }, + }); - const directors = await directorData.map(element => ({ - ...element, - name: element.fullname, - label: `${element.fullname} (${element.position}${element.posLevel})`, - })) + const directors = await directorData.map((element) => ({ + ...element, + name: element.fullname, + label: `${element.fullname} (${element.position}${element.posLevel})`, + })); - const experimenteeData = await this.personalRepository.find({ - select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"], - where: { personal_id: assign.personal_id }, - }) + const experimenteeData = await this.personalRepository.find({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { personal_id: assign.personal_id }, + }); - const experimentee = await experimenteeData.map(element => ({ - ...element, - name: element.prefixName + element.firstName + " " + element.lastName, - Oc: element.organization, - })) + const experimentee = await experimenteeData.map((element) => ({ + ...element, + name: element.prefixName + element.firstName + " " + element.lastName, + Oc: element.organization, + })); - return new HttpSuccess({ - experimentee: experimentee, - director: directors ? directors : null, - assign, - evaluate, - }) - } + return new HttpSuccess({ + experimentee: experimentee, + director: directors ? directors : null, + assign, + evaluate, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API บันทึกข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - * @summary บันทึกข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - */ - @Post("") - async PostData(@Query() assign_id: string, @Body() requestBody: CreateEvaluateCommander, @Request() request: RequestWithUser) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") + /** + * API บันทึกข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + * @summary บันทึกข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + */ + @Post("") + async PostData( + @Query() assign_id: string, + @Body() requestBody: CreateEvaluateCommander, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } - const director_id = director.personal_id + const director_id = director.personal_id; - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } - const postData: any = await { - assign_id, - ...requestBody, - director_id, - no: requestBody.evaluate_no, - date_start: requestBody.start_date, - personal_id: assign.personal_id, + const postData: any = await { + assign_id, + ...requestBody, + director_id, + no: requestBody.evaluate_no, + date_start: requestBody.start_date, + personal_id: assign.personal_id, - achievement_other_desc: requestBody.achievement_other ? requestBody.achievement_other.text : "", - achievement_other_level: requestBody.achievement_other ? Number(requestBody.achievement_other.level) : 0, - behavior_other_desc: requestBody.behavior_orther.text, - behavior_other_level: requestBody.behavior_orther.text != "" ? Number(requestBody.behavior_orther.level) : 0, + achievement_other_desc: requestBody.achievement_other + ? requestBody.achievement_other.text + : "", + achievement_other_level: requestBody.achievement_other + ? Number(requestBody.achievement_other.level) + : 0, + behavior_other_desc: requestBody.behavior_orther.text, + behavior_other_level: + requestBody.behavior_orther.text != "" + ? Number(requestBody.behavior_orther.level) + : 0, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; - await this.evaluateCommanderRepository.save(postData, { - data: request, - }) - setLogDataDiff(request, { before: null, after: postData }) + await this.evaluateCommanderRepository.save(postData, { + data: request, + }); + setLogDataDiff(request, { before: null, after: postData }); - if (Number(requestBody.evaluate_no) < 2) { - // #noted cronjob - // แจ้งผู้บังคับบัญชาเข้ามาบันทึกผลทุก 3 เดือน 2 ครั้ง - var dateSend = await findEndDate(3, requestBody.start_date) - const nextNo = await (Number(requestBody.evaluate_no) + 1) - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการ (สำหรับผู้บังคับบัญชา) ครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - receiverUserId: director_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateSend, - }) - .catch(error => { - console.error("Error calling API:", error) - }) - } + if (Number(requestBody.evaluate_no) < 2) { + // #noted cronjob + // แจ้งผู้บังคับบัญชาเข้ามาบันทึกผลทุก 3 เดือน 2 ครั้ง + var dateSend = await findEndDate(3, requestBody.start_date); + const nextNo = await (Number(requestBody.evaluate_no) + 1); + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + body: `ถึงกำหนดประเมินผลการทดลองปฏิบัติหน้าที่ราชการ (สำหรับผู้บังคับบัญชา) ครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + receiverUserId: director_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateSend, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } - return new HttpSuccess() - } + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API แก้ไขข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - * @summary แก้ไขข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) - * - */ - @Put("") - async UpdateData( - // @Query() assign_id: string, - @Query() evaluate_id: string, - @Body() requestBody: CreateEvaluateCommander, - @Request() request: RequestWithUser - ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") + /** + * API แก้ไขข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + * @summary แก้ไขข้อมูลแบบประเมินผล (ผู้บังคับบัญชา) + * + */ + @Put("") + async UpdateData( + // @Query() assign_id: string, + @Query() evaluate_id: string, + @Body() requestBody: CreateEvaluateCommander, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - let evaluate = await this.evaluateCommanderRepository.findOne({ - where: { id: evaluate_id }, - }) + let evaluate = await this.evaluateCommanderRepository.findOne({ + where: { id: evaluate_id }, + }); - const before = evaluate + const before = evaluate; - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน") - } + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + } - evaluate.commander_dated = requestBody.commander_dated - evaluate.knowledge_level = requestBody.knowledge_level - evaluate.skill_level = requestBody.skill_level - evaluate.competency_level = requestBody.competency_level - evaluate.learn_level = requestBody.learn_level - evaluate.apply_level = requestBody.apply_level - evaluate.success_level = requestBody.success_level - evaluate.achievement_other_desc = requestBody.achievement_other ? requestBody.achievement_other.text : "" - evaluate.achievement_other_level = requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0 + evaluate.commander_dated = requestBody.commander_dated; + evaluate.knowledge_level = requestBody.knowledge_level; + evaluate.skill_level = requestBody.skill_level; + evaluate.competency_level = requestBody.competency_level; + evaluate.learn_level = requestBody.learn_level; + evaluate.apply_level = requestBody.apply_level; + evaluate.success_level = requestBody.success_level; + evaluate.achievement_other_desc = requestBody.achievement_other + ? requestBody.achievement_other.text + : ""; + evaluate.achievement_other_level = + requestBody.achievement_other.text != "" + ? Number(requestBody.achievement_other.level) + : 0; - evaluate.conduct1_level = requestBody.conduct1_level - evaluate.conduct2_level = requestBody.conduct2_level - evaluate.conduct3_level = requestBody.conduct3_level - evaluate.conduct4_level = requestBody.conduct4_level - evaluate.moral1_level = requestBody.moral1_level - evaluate.moral2_level = requestBody.moral2_level - evaluate.moral3_level = requestBody.moral3_level - evaluate.discipline1_level = requestBody.discipline1_level - evaluate.discipline2_level = requestBody.discipline2_level - evaluate.discipline3_level = requestBody.discipline3_level - evaluate.discipline4_level = requestBody.discipline4_level - 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 - evaluate.behavior_strength_desc = requestBody.behavior_strength_desc - evaluate.behavior_improve_desc = requestBody.behavior_improve_desc - evaluate.orientation = requestBody.orientation - evaluate.self_learning = requestBody.self_learning - evaluate.training_seminar = requestBody.training_seminar - evaluate.other_training = requestBody.other_training - evaluate.updateUserId = request.user.sub - evaluate.updateFullName = request.user.name + evaluate.conduct1_level = requestBody.conduct1_level; + evaluate.conduct2_level = requestBody.conduct2_level; + evaluate.conduct3_level = requestBody.conduct3_level; + evaluate.conduct4_level = requestBody.conduct4_level; + evaluate.moral1_level = requestBody.moral1_level; + evaluate.moral2_level = requestBody.moral2_level; + evaluate.moral3_level = requestBody.moral3_level; + evaluate.discipline1_level = requestBody.discipline1_level; + evaluate.discipline2_level = requestBody.discipline2_level; + evaluate.discipline3_level = requestBody.discipline3_level; + evaluate.discipline4_level = requestBody.discipline4_level; + 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; + evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; + evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; + evaluate.orientation = requestBody.orientation; + evaluate.self_learning = requestBody.self_learning; + evaluate.training_seminar = requestBody.training_seminar; + evaluate.other_training = requestBody.other_training; + evaluate.updateUserId = request.user.sub; + evaluate.updateFullName = request.user.name; - await this.evaluateCommanderRepository.save(evaluate, { data: request }) - setLogDataDiff(request, { before, after: evaluate }) + await this.evaluateCommanderRepository.save(evaluate, { data: request }); + setLogDataDiff(request, { before, after: evaluate }); - return new HttpSuccess() - } + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } } diff --git a/src/controllers/EvaluateRecordController.ts b/src/controllers/EvaluateRecordController.ts index 9a79338..7b3cce0 100644 --- a/src/controllers/EvaluateRecordController.ts +++ b/src/controllers/EvaluateRecordController.ts @@ -1,1062 +1,1357 @@ -import { Controller, Route, Security, Tags, Request, SuccessResponse, Response, Get, Post, Body, Query, Put } from "tsoa" -import HttpSuccess from "../interfaces/http-success" -import HttpStatusCode from "../interfaces/http-status" -import { RequestWithUser } from "../middlewares/user" -import { findEndDate, setLogDataDiff } from "../interfaces/utils" -import { AppDataSource } from "../database/data-source" -import { AssignDirector } from "../entities/AssignDirector" -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 CallAPI from "../interfaces/call-api" -import permission from "../interfaces/permission" +import { + Controller, + Route, + Security, + Tags, + Request, + SuccessResponse, + Response, + Get, + Post, + Body, + Query, + Put, +} from "tsoa"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import { RequestWithUser } from "../middlewares/user"; +import { findEndDate, setLogDataDiff } from "../interfaces/utils"; +import { AppDataSource } from "../database/data-source"; +import { AssignDirector } from "../entities/AssignDirector"; +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 CallAPI from "../interfaces/call-api"; +import permission from "../interfaces/permission"; @Route("api/v1/probation/evaluate-record") @Tags("แบบบันทึกผล") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class EvaluateRecordController extends Controller { - 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) - - /** - * API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล - * - * @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล - * - */ - @Get("create") - async GetCreate(@Query() assign_id: string, @Request() request: RequestWithUser) { - let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION") - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION") - - const directorData = await this.assignDirectorRepository.findOne({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { - assign_id, - role: "mentor", - }, - }) - - if (!directorData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } - - const director = await { - ...directorData, - name: directorData.fullname, - label: `${directorData.fullname} (${directorData.position}, ${directorData.posType}: ${directorData.posLevel})`, - } - - const director_id = director.personal_id - - const assign = await this.assignRepository.findOne({ - where: { - id: assign_id, - }, - }) - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const profileData = await this.personalRepository.findOne({ - select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"], - where: { - personal_id: assign.personal_id, - }, - }) - if (!profileData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") - } - - const profile = await { - id: profileData.personal_id, - name: profileData.prefixName + profileData.firstName + " " + profileData.lastName, - positionName: profileData.positionName, - positionLevelName: profileData.positionLevelName, - Oc: profileData.organization, - } - - const output = await this.assignOutputRepository.find({ - select: ["id", "output_desc"], - where: { - assign_id, - }, - order: { id: "ASC" }, - }) - - const evaluate_amount = await this.evaluateAssessorRepository.count({ - where: { - assign_id, - director_id, - }, - }) - - const evaluate_no = await (evaluate_amount + 1) - const start_date = await (evaluate_amount == 0 ? assign.date_start : findEndDate(evaluate_amount * 2, assign.date_start)) - - var commanderData = await this.assignDirectorRepository.findOne({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { personal_id: director_id }, - }) - - if (!commanderData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา") - } - - const commander = await { - ...commanderData, - name: commanderData.fullname, - label: `${commanderData.fullname} (${commanderData.position}${commanderData.posLevel})`, - } - - return new HttpSuccess({ - person: profile, - assign, - assign_output: output, - evaluate_no, - start_date, - end_date: findEndDate(2, start_date), - director: commander, - }) - } - - /** - * API ข้อมูลแบบบันทึกผล(ผู้ดูแล) - * - * @summary ข้อมูลแบบบันทึกผล(ผู้ดูแล) - * - */ - @Get("") - 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: { - assign_id, - role: "mentor", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - let evaluate: any = null - let evaluateData: any = [] - if (evaluate_no) { - evaluate = await this.evaluateAssessorRepository.findOne({ - where: { - director_id, - assign_id, - no: evaluate_no, - }, - }) - - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน") - } - - const achievementData = await this.evaluateAchievementRepository.find({ - select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"], - where: { - evaluate_id: evaluate.id, - }, - order: { output_id: "ASC" }, - }) - if (!achievementData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } - - const achievements = await achievementData.map(achievement => { - return { - ...achievement, - evaluate_expect_desc: achievement.output_desc, - evaluate_output_desc: achievement.output_desc, - } - }) - - evaluateData = await { - id: evaluate.id, - director_id: evaluate.director_id, - assign_id, - no: Number(evaluate.no), - date_start: evaluate.date_start, - date_finish: evaluate.date_finish, - assessor_dated: evaluate.assessor_dated, - knowledge_level: evaluate.knowledge_level, - skill_level: evaluate.skill_level, - competency_level: evaluate.competency_level, - learn_level: evaluate.learn_level, - apply_level: evaluate.apply_level, - achievement_other_desc: evaluate.achievement_other_desc, - achievement_other_level: evaluate.achievement_other_level, - achievement_strength_desc: evaluate.achievement_strength_desc, - achievement_improve_desc: evaluate.achievement_improve_desc, - conduct1_level: evaluate.conduct1_level, - conduct2_level: evaluate.conduct2_level, - conduct3_level: evaluate.conduct3_level, - conduct4_level: evaluate.conduct4_level, - moral1_level: evaluate.moral1_level, - moral2_level: evaluate.moral2_level, - moral3_level: evaluate.moral3_level, - discipline1_level: evaluate.discipline1_level, - discipline2_level: evaluate.discipline2_level, - discipline3_level: evaluate.discipline3_level, - discipline4_level: evaluate.discipline4_level, - discipline5_level: evaluate.discipline5_level, - behavior_other_desc: evaluate.behavior_other_desc, - behavior_other_level: evaluate.behavior_other_level, - 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: achievements, - } - } else { - evaluate = await this.evaluateAssessorRepository.find({ - where: { - director_id: director_id, - assign_id, - }, - order: { no: "ASC" }, - }) - - if (!evaluate) { - 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 achievements = await achievementData.map(achievement => { - return { - ...achievement, - evaluate_expect_desc: achievement.output_desc, - evaluate_output_desc: achievement.output_desc, - } - }) - - evaluateData[index] = await { - id: element.id, - director_id: element.director_id, - assign_id, - no: Number(element.no), - date_start: element.date_start, - date_finish: element.date_finish, - assessor_dated: element.assessor_dated, - knowledge_level: element.knowledge_level, - skill_level: element.skill_level, - competency_level: element.competency_level, - learn_level: element.learn_level, - apply_level: element.apply_level, - achievement_other_desc: element.achievement_other_desc, - achievement_other_level: element.achievement_other_level, - achievement_strength_desc: element.achievement_strength_desc, - achievement_improve_desc: element.achievement_improve_desc, - conduct1_level: element.conduct1_level, - conduct2_level: element.conduct2_level, - conduct3_level: element.conduct3_level, - conduct4_level: element.conduct4_level, - moral1_level: element.moral1_level, - moral2_level: element.moral2_level, - moral3_level: element.moral3_level, - discipline1_level: element.discipline1_level, - discipline2_level: element.discipline2_level, - discipline3_level: element.discipline3_level, - discipline4_level: element.discipline4_level, - discipline5_level: element.discipline5_level, - behavior_other_desc: element.behavior_other_desc, - behavior_other_level: element.behavior_other_level, - behavior_strength_desc: element.behavior_strength_desc, - behavior_improve_desc: element.behavior_improve_desc, - orientation: element.orientation, - self_learning: element.self_learning, - training_seminar: element.training_seminar, - other_training: element.other_training, - createdAt: element.createdAt, - updatedAt: element.updatedAt, - achievements: achievements, - } - }) - ) - } - - const assign = await this.assignRepository.findOne({ - where: { - id: assign_id, - }, - }) - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const experimenteeData = await this.personalRepository.find({ - select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"], - where: { personal_id: assign.personal_id }, - }) - - const experimentee = await experimenteeData.map(element => ({ - ...element, - name: element.prefixName + element.firstName + " " + element.lastName, - Oc: element.organization, - })) - - const directorData = await this.assignDirectorRepository.find({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { personal_id: director_id }, - }) - - const directors = await directorData.map(element => ({ - ...element, - name: element.fullname, - label: `${element.fullname} (${element.position}${element.posLevel})`, - })) - - return new HttpSuccess({ - experimentee: experimentee ? experimentee : null, - director: directors ? directors : null, - assign, - evaluate: evaluateData, - }) - } - - /** - * API เพิ่มแบบบันทึกผล(ผู้ดูแล) - * - * @summary เพิ่มแบบบันทึกผล(ผู้ดูแล) - * - */ - @Post("") - async PostData(@Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, @Request() request: RequestWithUser) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") - - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "mentor", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const postData: any = await { - assign_id, - ...requestBody, - director_id, - no: requestBody.evaluate_no, - date_start: requestBody.start_date, - personal_id: assign.personal_id, - - achievement_other_desc: requestBody.achievement_other ? requestBody.achievement_other.text : "", - achievement_other_level: requestBody.achievement_other ? Number(requestBody.achievement_other.level) : 0, - behavior_other_desc: requestBody.behavio_orther.text, - behavior_other_level: 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, - self_learning: requestBody.self_learning, - training_seminar: requestBody.training_seminar, - other_training: requestBody.other_training, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - - const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, { - data: request, - }) - - if (evaluateAssessor) { - await Promise.all( - requestBody.evaluate_expenct_level.map(async (expenct, index) => { - const evaluateAchievement: CreateEvaluateAchievement = await { - evaluate_id: evaluateAssessor.id, - assign_id, - output_id: expenct.id.toString(), - - 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), - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - await this.evaluateAchievementRepository.save(evaluateAchievement, { - data: request, - }) - }) - ) - } - - setLogDataDiff(request, { before: null, after: postData }) - - if (Number(requestBody.evaluate_no) < 3) { - // #noted cronjob - // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง - const dateSaveForm = await findEndDate(2, requestBody.start_date) - const nextNo = await (Number(requestBody.evaluate_no) + 1) - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - receiverUserId: director_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateSaveForm, - }) - .catch(error => { - console.error("Error calling API:", error) - }) - } - - return new HttpSuccess() - } - - /** - * API แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล) - * - * @summary แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล) - * - */ - @Put("") - async UpdateData(@Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, @Request() request: RequestWithUser) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") - - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "mentor", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - let evaluate = await this.evaluateAssessorRepository.findOne({ - where: { id: evaluate_id }, - }) - - const before = evaluate - - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน") - } - - evaluate.assessor_dated = requestBody.assessor_dated - evaluate.knowledge_level = requestBody.knowledge_level - evaluate.skill_level = requestBody.skill_level - evaluate.competency_level = requestBody.competency_level - evaluate.learn_level = requestBody.learn_level - evaluate.apply_level = requestBody.apply_level - evaluate.achievement_other_desc = requestBody.achievement_other ? requestBody.achievement_other.text : "" - evaluate.achievement_other_level = 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 - evaluate.conduct1_level = requestBody.conduct1_level - evaluate.conduct2_level = requestBody.conduct2_level - evaluate.conduct3_level = requestBody.conduct3_level - evaluate.conduct4_level = requestBody.conduct4_level - evaluate.moral1_level = requestBody.moral1_level - evaluate.moral2_level = requestBody.moral2_level - evaluate.moral3_level = requestBody.moral3_level - evaluate.discipline1_level = requestBody.discipline1_level - evaluate.discipline2_level = requestBody.discipline2_level - evaluate.discipline3_level = requestBody.discipline3_level - evaluate.discipline4_level = requestBody.discipline4_level - 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 - evaluate.behavior_strength_desc = requestBody.behavior_strength_desc - evaluate.behavior_improve_desc = requestBody.behavior_improve_desc - evaluate.orientation = requestBody.orientation - evaluate.self_learning = requestBody.self_learning - evaluate.training_seminar = requestBody.training_seminar - evaluate.other_training = requestBody.other_training - evaluate.updateUserId = request.user.sub - evaluate.updateFullName = request.user.name - - const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, { - data: request, - }) - - if (evaluateAssessor) { - await this.evaluateAchievementRepository.delete({ - evaluate_id, - }) - await Promise.all( - requestBody.evaluate_expenct_level.map(async (expenct, index) => { - const evaluateAchievement: CreateEvaluateAchievement = await { - evaluate_id: evaluateAssessor.id, - assign_id, - output_id: expenct.id.toString(), - 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), - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - await this.evaluateAchievementRepository.save(evaluateAchievement, { - data: request, - }) - }) - ) - } - - setLogDataDiff(request, { before, after: evaluate }) - - return new HttpSuccess() - } - - /** - * API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา) - * - * @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา) - * - */ - @Get("create/commander") - async GetCreateCommander(@Query() assign_id: string, @Request() request: RequestWithUser) { - let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION") - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION") - - const directorData = await this.assignDirectorRepository.findOne({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { - assign_id, - role: "commander", - }, - }) - - if (!directorData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } - - const director = await { - ...directorData, - name: directorData.fullname, - label: `${directorData.fullname} (${directorData.position}${directorData.posLevel})`, - } - - const director_id = director.personal_id - - const assign = await this.assignRepository.findOne({ - where: { - id: assign_id, - }, - }) - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const profileData = await this.personalRepository.findOne({ - select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"], - where: { - personal_id: assign.personal_id, - }, - }) - if (!profileData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") - } - - const profile = await { - id: profileData.personal_id, - name: profileData.prefixName + profileData.firstName + " " + profileData.lastName, - positionName: profileData.positionName, - positionLevelName: profileData.positionLevelName, - Oc: profileData.organization, - } - - const output = await this.assignOutputRepository.find({ - select: ["id", "output_desc"], - where: { - assign_id, - }, - order: { id: "ASC" }, - }) - - const evaluate_amount = await this.evaluateAssessorRepository.count({ - where: { - assign_id, - director_id, - }, - }) - - const evaluate_no = await (evaluate_amount + 1) - const start_date = await (evaluate_amount == 0 ? assign.date_start : findEndDate(evaluate_amount * 2, assign.date_start)) - - return new HttpSuccess({ - person: profile, - assign, - assign_output: output, - evaluate_no, - start_date, - end_date: findEndDate(2, start_date), - director, - }) - } - - /** - * API ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * - * @summary ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * - */ - @Get("commander") - async GetDataCommander(@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: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - let evaluate: any = null - let evaluateData: any = [] - if (evaluate_no) { - evaluate = await this.evaluateAssessorRepository.findOne({ - where: { - director_id, - assign_id, - no: evaluate_no, - }, - }) - - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน") - } - - const achievementData = await this.evaluateAchievementRepository.find({ - select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"], - where: { - evaluate_id: evaluate.id, - }, - order: { output_id: "ASC" }, - }) - if (!achievementData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล") - } - - const achievements = await achievementData.map(achievement => { - return { - ...achievement, - evaluate_expect_desc: achievement.output_desc, - evaluate_output_desc: achievement.output_desc, - } - }) - - evaluateData = await { - id: evaluate.id, - director_id: evaluate.director_id, - assign_id, - no: Number(evaluate.no), - date_start: evaluate.date_start, - date_finish: evaluate.date_finish, - assessor_dated: evaluate.assessor_dated, - knowledge_level: evaluate.knowledge_level, - skill_level: evaluate.skill_level, - competency_level: evaluate.competency_level, - learn_level: evaluate.learn_level, - apply_level: evaluate.apply_level, - achievement_other_desc: evaluate.achievement_other_desc, - achievement_other_level: evaluate.achievement_other_level, - achievement_strength_desc: evaluate.achievement_strength_desc, - achievement_improve_desc: evaluate.achievement_improve_desc, - conduct1_level: evaluate.conduct1_level, - conduct2_level: evaluate.conduct2_level, - conduct3_level: evaluate.conduct3_level, - conduct4_level: evaluate.conduct4_level, - moral1_level: evaluate.moral1_level, - moral2_level: evaluate.moral2_level, - moral3_level: evaluate.moral3_level, - discipline1_level: evaluate.discipline1_level, - discipline2_level: evaluate.discipline2_level, - discipline3_level: evaluate.discipline3_level, - discipline4_level: evaluate.discipline4_level, - discipline5_level: evaluate.discipline5_level, - behavior_other_desc: evaluate.behavior_other_desc, - behavior_other_level: evaluate.behavior_other_level, - 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: achievements, - } - } else { - evaluate = await this.evaluateAssessorRepository.find({ - where: { - director_id: director_id, - assign_id, - }, - order: { no: "ASC" }, - }) - - if (!evaluate) { - 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 achievements = await achievementData.map(achievement => { - return { - ...achievement, - evaluate_expect_desc: achievement.output_desc, - evaluate_output_desc: achievement.output_desc, - } - }) - - evaluateData[index] = await { - id: element.id, - director_id: element.director_id, - assign_id, - no: Number(element.no), - date_start: element.date_start, - date_finish: element.date_finish, - assessor_dated: element.assessor_dated, - knowledge_level: element.knowledge_level, - skill_level: element.skill_level, - competency_level: element.competency_level, - learn_level: element.learn_level, - apply_level: element.apply_level, - achievement_other_desc: element.achievement_other_desc, - achievement_other_level: element.achievement_other_level, - achievement_strength_desc: element.achievement_strength_desc, - achievement_improve_desc: element.achievement_improve_desc, - conduct1_level: element.conduct1_level, - conduct2_level: element.conduct2_level, - conduct3_level: element.conduct3_level, - conduct4_level: element.conduct4_level, - moral1_level: element.moral1_level, - moral2_level: element.moral2_level, - moral3_level: element.moral3_level, - discipline1_level: element.discipline1_level, - discipline2_level: element.discipline2_level, - discipline3_level: element.discipline3_level, - discipline4_level: element.discipline4_level, - discipline5_level: element.discipline5_level, - behavior_other_desc: element.behavior_other_desc, - behavior_other_level: element.behavior_other_level, - behavior_strength_desc: element.behavior_strength_desc, - behavior_improve_desc: element.behavior_improve_desc, - orientation: element.orientation, - self_learning: element.self_learning, - training_seminar: element.training_seminar, - other_training: element.other_training, - createdAt: element.createdAt, - updatedAt: element.updatedAt, - achievements: achievements, - } - }) - ) - } - - const assign = await this.assignRepository.findOne({ - where: { - id: assign_id, - }, - }) - - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const experimenteeData = await this.personalRepository.find({ - select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"], - where: { personal_id: assign.personal_id }, - }) - - const experimentee = await experimenteeData.map(element => ({ - ...element, - name: element.prefixName + element.firstName + " " + element.lastName, - Oc: element.organization, - })) - - const directorData = await this.assignDirectorRepository.find({ - select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"], - where: { personal_id: director_id }, - }) - - const directors = await directorData.map(element => ({ - ...element, - name: element.fullname, - label: `${element.fullname} (${element.position}${element.posLevel})`, - })) - - return new HttpSuccess({ - experimentee: experimentee ? experimentee : null, - person: directors ? directors : null, - assign, - evaluate: evaluateData, - }) - } - - /** - * API บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * - * @summary บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * - */ - @Post("commander") - async PostDataCommander(@Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, @Request() request: RequestWithUser) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") - - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน") - } - - const postData: any = await { - assign_id, - ...requestBody, - director_id, - no: requestBody.evaluate_no, - date_start: requestBody.start_date, - personal_id: assign.personal_id, - - achievement_other_desc: requestBody.achievement_other ? requestBody.achievement_other.text : "", - achievement_other_level: requestBody.achievement_other ? Number(requestBody.achievement_other.level) : 0, - behavior_other_desc: requestBody.behavio_orther.text, - behavior_other_level: 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, - self_learning: requestBody.self_learning, - training_seminar: requestBody.training_seminar, - other_training: requestBody.other_training, - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - - const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, { - data: request, - }) - if (evaluateAssessor) { - await Promise.all( - requestBody.evaluate_expenct_level.map(async (expenct, index) => { - const evaluateAchievement: CreateEvaluateAchievement = await { - evaluate_id: evaluateAssessor.id, - assign_id, - output_id: expenct.id.toString(), - 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), - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - await this.evaluateAchievementRepository.save(evaluateAchievement, { - data: request, - }) - }) - ) - } - - setLogDataDiff(request, { before: null, after: postData }) - - if (Number(requestBody.evaluate_no) < 3) { - // #noted cronjob - // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง - const dateSaveForm = await findEndDate(2, requestBody.start_date) - const nextNo = await (Number(requestBody.evaluate_no) + 1) - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, - receiverUserId: director_id, - payload: "", - isSendMail: true, - isSendInbox: true, - receiveDate: dateSaveForm, - }) - .catch(error => { - console.error("Error calling API:", error) - }) - } - - return new HttpSuccess() - } - - /** - * API แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * @summary แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) - * - */ - @Put("commander") - async UpdateDataCommander(@Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, @Request() request: RequestWithUser) { - await new permission().PermissionUpdate(request, "SYS_PROBATION") - - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "commander", - }, - }) - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล") - } - - const director_id = director.personal_id - - let evaluate = await this.evaluateAssessorRepository.findOne({ - where: { id: evaluate_id }, - }) - - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน") - } - const before = evaluate - - evaluate.assessor_dated = requestBody.assessor_dated - evaluate.knowledge_level = requestBody.knowledge_level - evaluate.skill_level = requestBody.skill_level - evaluate.competency_level = requestBody.competency_level - evaluate.learn_level = requestBody.learn_level - evaluate.apply_level = requestBody.apply_level - evaluate.achievement_other_desc = requestBody.achievement_other ? requestBody.achievement_other.text : "" - evaluate.achievement_other_level = 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 - evaluate.conduct1_level = requestBody.conduct1_level - evaluate.conduct2_level = requestBody.conduct2_level - evaluate.conduct3_level = requestBody.conduct3_level - evaluate.conduct4_level = requestBody.conduct4_level - evaluate.moral1_level = requestBody.moral1_level - evaluate.moral2_level = requestBody.moral2_level - evaluate.moral3_level = requestBody.moral3_level - evaluate.discipline1_level = requestBody.discipline1_level - evaluate.discipline2_level = requestBody.discipline2_level - evaluate.discipline3_level = requestBody.discipline3_level - evaluate.discipline4_level = requestBody.discipline4_level - 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 - evaluate.behavior_strength_desc = requestBody.behavior_strength_desc - evaluate.behavior_improve_desc = requestBody.behavior_improve_desc - evaluate.orientation = requestBody.orientation - evaluate.self_learning = requestBody.self_learning - evaluate.training_seminar = requestBody.training_seminar - evaluate.other_training = requestBody.other_training - evaluate.updateUserId = request.user.sub - evaluate.updateFullName = request.user.name - - const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, { - data: request, - }) - - if (evaluateAssessor) { - await this.evaluateAchievementRepository.delete({ - evaluate_id, - }) - await Promise.all( - requestBody.evaluate_expenct_level.map(async (expenct, index) => { - const evaluateAchievement: CreateEvaluateAchievement = await { - evaluate_id: evaluateAssessor.id, - assign_id, - output_id: expenct.id.toString(), - 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), - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - } - await this.evaluateAchievementRepository.save(evaluateAchievement, { - data: request, - }) - }) - ) - } - - setLogDataDiff(request, { before, after: evaluate }) - - return new HttpSuccess() - } + 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); + + /** + * API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล + * + * @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล + * + */ + @Get("create") + async GetCreate( + @Query() assign_id: string, + @Request() request: RequestWithUser + ) { + try { + let _workflow = await new permission().Workflow( + request, + assign_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); + + const directorData = await this.assignDirectorRepository.findOne({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { + assign_id, + role: "mentor", + }, + }); + + if (!directorData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const director = await { + ...directorData, + name: directorData.fullname, + label: `${directorData.fullname} (${directorData.position}, ${directorData.posType}: ${directorData.posLevel})`, + }; + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + where: { + id: assign_id, + }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const profileData = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { + personal_id: assign.personal_id, + }, + }); + if (!profileData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const profile = await { + id: profileData.personal_id, + name: + profileData.prefixName + + profileData.firstName + + " " + + profileData.lastName, + positionName: profileData.positionName, + positionLevelName: profileData.positionLevelName, + Oc: profileData.organization, + }; + + const output = await this.assignOutputRepository.find({ + select: ["id", "output_desc"], + where: { + assign_id, + }, + order: { id: "ASC" }, + }); + + const evaluate_amount = await this.evaluateAssessorRepository.count({ + where: { + assign_id, + director_id, + }, + }); + + const evaluate_no = await (evaluate_amount + 1); + const start_date = await (evaluate_amount == 0 + ? assign.date_start + : findEndDate(evaluate_amount * 2, assign.date_start)); + + var commanderData = await this.assignDirectorRepository.findOne({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { personal_id: director_id }, + }); + + if (!commanderData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้บังคับบัญชา" + ); + } + + const commander = await { + ...commanderData, + name: commanderData.fullname, + label: `${commanderData.fullname} (${commanderData.position}${commanderData.posLevel})`, + }; + + return new HttpSuccess({ + person: profile, + assign, + assign_output: output, + evaluate_no, + start_date, + end_date: findEndDate(2, start_date), + director: commander, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API ข้อมูลแบบบันทึกผล(ผู้ดูแล) + * + * @summary ข้อมูลแบบบันทึกผล(ผู้ดูแล) + * + */ + @Get("") + async GetData( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string + ) { + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "mentor", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + let evaluate: any = null; + let evaluateData: any = []; + if (evaluate_no) { + evaluate = await this.evaluateAssessorRepository.findOne({ + where: { + director_id, + assign_id, + no: evaluate_no, + }, + }); + + if (!evaluate) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบประเมิน" + ); + } + + const achievementData = await this.evaluateAchievementRepository.find({ + select: [ + "output_desc", + "evaluate_expect_level", + "output_desc", + "evaluate_output_level", + ], + where: { + evaluate_id: evaluate.id, + }, + order: { output_id: "ASC" }, + }); + if (!achievementData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const achievements = await achievementData.map((achievement) => { + return { + ...achievement, + evaluate_expect_desc: achievement.output_desc, + evaluate_output_desc: achievement.output_desc, + }; + }); + + evaluateData = await { + id: evaluate.id, + director_id: evaluate.director_id, + assign_id, + no: Number(evaluate.no), + date_start: evaluate.date_start, + date_finish: evaluate.date_finish, + assessor_dated: evaluate.assessor_dated, + knowledge_level: evaluate.knowledge_level, + skill_level: evaluate.skill_level, + competency_level: evaluate.competency_level, + learn_level: evaluate.learn_level, + apply_level: evaluate.apply_level, + achievement_other_desc: evaluate.achievement_other_desc, + achievement_other_level: evaluate.achievement_other_level, + achievement_strength_desc: evaluate.achievement_strength_desc, + achievement_improve_desc: evaluate.achievement_improve_desc, + conduct1_level: evaluate.conduct1_level, + conduct2_level: evaluate.conduct2_level, + conduct3_level: evaluate.conduct3_level, + conduct4_level: evaluate.conduct4_level, + moral1_level: evaluate.moral1_level, + moral2_level: evaluate.moral2_level, + moral3_level: evaluate.moral3_level, + discipline1_level: evaluate.discipline1_level, + discipline2_level: evaluate.discipline2_level, + discipline3_level: evaluate.discipline3_level, + discipline4_level: evaluate.discipline4_level, + discipline5_level: evaluate.discipline5_level, + behavior_other_desc: evaluate.behavior_other_desc, + behavior_other_level: evaluate.behavior_other_level, + 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: achievements, + }; + } else { + evaluate = await this.evaluateAssessorRepository.find({ + where: { + director_id: director_id, + assign_id, + }, + order: { no: "ASC" }, + }); + + if (!evaluate) { + 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 achievements = await achievementData.map((achievement) => { + return { + ...achievement, + evaluate_expect_desc: achievement.output_desc, + evaluate_output_desc: achievement.output_desc, + }; + }); + + evaluateData[index] = await { + id: element.id, + director_id: element.director_id, + assign_id, + no: Number(element.no), + date_start: element.date_start, + date_finish: element.date_finish, + assessor_dated: element.assessor_dated, + knowledge_level: element.knowledge_level, + skill_level: element.skill_level, + competency_level: element.competency_level, + learn_level: element.learn_level, + apply_level: element.apply_level, + achievement_other_desc: element.achievement_other_desc, + achievement_other_level: element.achievement_other_level, + achievement_strength_desc: element.achievement_strength_desc, + achievement_improve_desc: element.achievement_improve_desc, + conduct1_level: element.conduct1_level, + conduct2_level: element.conduct2_level, + conduct3_level: element.conduct3_level, + conduct4_level: element.conduct4_level, + moral1_level: element.moral1_level, + moral2_level: element.moral2_level, + moral3_level: element.moral3_level, + discipline1_level: element.discipline1_level, + discipline2_level: element.discipline2_level, + discipline3_level: element.discipline3_level, + discipline4_level: element.discipline4_level, + discipline5_level: element.discipline5_level, + behavior_other_desc: element.behavior_other_desc, + behavior_other_level: element.behavior_other_level, + behavior_strength_desc: element.behavior_strength_desc, + behavior_improve_desc: element.behavior_improve_desc, + orientation: element.orientation, + self_learning: element.self_learning, + training_seminar: element.training_seminar, + other_training: element.other_training, + createdAt: element.createdAt, + updatedAt: element.updatedAt, + achievements: achievements, + }; + }) + ); + } + + const assign = await this.assignRepository.findOne({ + where: { + id: assign_id, + }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const experimenteeData = await this.personalRepository.find({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { personal_id: assign.personal_id }, + }); + + const experimentee = await experimenteeData.map((element) => ({ + ...element, + name: element.prefixName + element.firstName + " " + element.lastName, + Oc: element.organization, + })); + + const directorData = await this.assignDirectorRepository.find({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { personal_id: director_id }, + }); + + const directors = await directorData.map((element) => ({ + ...element, + name: element.fullname, + label: `${element.fullname} (${element.position}${element.posLevel})`, + })); + + return new HttpSuccess({ + experimentee: experimentee ? experimentee : null, + director: directors ? directors : null, + assign, + evaluate: evaluateData, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API เพิ่มแบบบันทึกผล(ผู้ดูแล) + * + * @summary เพิ่มแบบบันทึกผล(ผู้ดูแล) + * + */ + @Post("") + async PostData( + @Query() assign_id: string, + @Body() requestBody: CreateEvaluateAssessor, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "mentor", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const postData: any = await { + assign_id, + ...requestBody, + director_id, + no: requestBody.evaluate_no, + date_start: requestBody.start_date, + personal_id: assign.personal_id, + + achievement_other_desc: requestBody.achievement_other + ? requestBody.achievement_other.text + : "", + achievement_other_level: requestBody.achievement_other + ? Number(requestBody.achievement_other.level) + : 0, + behavior_other_desc: requestBody.behavio_orther.text, + behavior_other_level: + 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, + self_learning: requestBody.self_learning, + training_seminar: requestBody.training_seminar, + other_training: requestBody.other_training, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + + const evaluateAssessor = await this.evaluateAssessorRepository.save( + postData, + { + data: request, + } + ); + + if (evaluateAssessor) { + await Promise.all( + requestBody.evaluate_expenct_level.map(async (expenct, index) => { + const evaluateAchievement: CreateEvaluateAchievement = await { + evaluate_id: evaluateAssessor.id, + assign_id, + output_id: expenct.id.toString(), + + 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 + ), + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + await this.evaluateAchievementRepository.save(evaluateAchievement, { + data: request, + }); + }) + ); + } + + setLogDataDiff(request, { before: null, after: postData }); + + if (Number(requestBody.evaluate_no) < 3) { + // #noted cronjob + // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง + const dateSaveForm = await findEndDate(2, requestBody.start_date); + const nextNo = await (Number(requestBody.evaluate_no) + 1); + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + receiverUserId: director_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateSaveForm, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล) + * + * @summary แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล) + * + */ + @Put("") + async UpdateData( + @Query() assign_id: string, + @Query() evaluate_id: string, + @Body() requestBody: CreateEvaluateAssessor, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "mentor", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + let evaluate = await this.evaluateAssessorRepository.findOne({ + where: { id: evaluate_id }, + }); + + const before = evaluate; + + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + } + + evaluate.assessor_dated = requestBody.assessor_dated; + evaluate.knowledge_level = requestBody.knowledge_level; + evaluate.skill_level = requestBody.skill_level; + evaluate.competency_level = requestBody.competency_level; + evaluate.learn_level = requestBody.learn_level; + evaluate.apply_level = requestBody.apply_level; + evaluate.achievement_other_desc = requestBody.achievement_other + ? requestBody.achievement_other.text + : ""; + evaluate.achievement_other_level = + 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; + evaluate.conduct1_level = requestBody.conduct1_level; + evaluate.conduct2_level = requestBody.conduct2_level; + evaluate.conduct3_level = requestBody.conduct3_level; + evaluate.conduct4_level = requestBody.conduct4_level; + evaluate.moral1_level = requestBody.moral1_level; + evaluate.moral2_level = requestBody.moral2_level; + evaluate.moral3_level = requestBody.moral3_level; + evaluate.discipline1_level = requestBody.discipline1_level; + evaluate.discipline2_level = requestBody.discipline2_level; + evaluate.discipline3_level = requestBody.discipline3_level; + evaluate.discipline4_level = requestBody.discipline4_level; + 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; + evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; + evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; + evaluate.orientation = requestBody.orientation; + evaluate.self_learning = requestBody.self_learning; + evaluate.training_seminar = requestBody.training_seminar; + evaluate.other_training = requestBody.other_training; + evaluate.updateUserId = request.user.sub; + evaluate.updateFullName = request.user.name; + + const evaluateAssessor = await this.evaluateAssessorRepository.save( + evaluate, + { + data: request, + } + ); + + if (evaluateAssessor) { + await this.evaluateAchievementRepository.delete({ + evaluate_id, + }); + await Promise.all( + requestBody.evaluate_expenct_level.map(async (expenct, index) => { + const evaluateAchievement: CreateEvaluateAchievement = await { + evaluate_id: evaluateAssessor.id, + assign_id, + output_id: expenct.id.toString(), + 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 + ), + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + await this.evaluateAchievementRepository.save(evaluateAchievement, { + data: request, + }); + }) + ); + } + + setLogDataDiff(request, { before, after: evaluate }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา) + * + * @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา) + * + */ + @Get("create/commander") + async GetCreateCommander( + @Query() assign_id: string, + @Request() request: RequestWithUser + ) { + try { + let _workflow = await new permission().Workflow( + request, + assign_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); + + const directorData = await this.assignDirectorRepository.findOne({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { + assign_id, + role: "commander", + }, + }); + + if (!directorData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const director = await { + ...directorData, + name: directorData.fullname, + label: `${directorData.fullname} (${directorData.position}${directorData.posLevel})`, + }; + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + where: { + id: assign_id, + }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const profileData = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { + personal_id: assign.personal_id, + }, + }); + if (!profileData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const profile = await { + id: profileData.personal_id, + name: + profileData.prefixName + + profileData.firstName + + " " + + profileData.lastName, + positionName: profileData.positionName, + positionLevelName: profileData.positionLevelName, + Oc: profileData.organization, + }; + + const output = await this.assignOutputRepository.find({ + select: ["id", "output_desc"], + where: { + assign_id, + }, + order: { id: "ASC" }, + }); + + const evaluate_amount = await this.evaluateAssessorRepository.count({ + where: { + assign_id, + director_id, + }, + }); + + const evaluate_no = await (evaluate_amount + 1); + const start_date = await (evaluate_amount == 0 + ? assign.date_start + : findEndDate(evaluate_amount * 2, assign.date_start)); + + return new HttpSuccess({ + person: profile, + assign, + assign_output: output, + evaluate_no, + start_date, + end_date: findEndDate(2, start_date), + director, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * + * @summary ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * + */ + @Get("commander") + async GetDataCommander( + @Request() request: RequestWithUser, + @Query() assign_id: string, + @Query() evaluate_no?: string + ) { + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + let evaluate: any = null; + let evaluateData: any = []; + if (evaluate_no) { + evaluate = await this.evaluateAssessorRepository.findOne({ + where: { + director_id, + assign_id, + no: evaluate_no, + }, + }); + + if (!evaluate) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบประเมิน" + ); + } + + const achievementData = await this.evaluateAchievementRepository.find({ + select: [ + "output_desc", + "evaluate_expect_level", + "output_desc", + "evaluate_output_level", + ], + where: { + evaluate_id: evaluate.id, + }, + order: { output_id: "ASC" }, + }); + if (!achievementData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + const achievements = await achievementData.map((achievement) => { + return { + ...achievement, + evaluate_expect_desc: achievement.output_desc, + evaluate_output_desc: achievement.output_desc, + }; + }); + + evaluateData = await { + id: evaluate.id, + director_id: evaluate.director_id, + assign_id, + no: Number(evaluate.no), + date_start: evaluate.date_start, + date_finish: evaluate.date_finish, + assessor_dated: evaluate.assessor_dated, + knowledge_level: evaluate.knowledge_level, + skill_level: evaluate.skill_level, + competency_level: evaluate.competency_level, + learn_level: evaluate.learn_level, + apply_level: evaluate.apply_level, + achievement_other_desc: evaluate.achievement_other_desc, + achievement_other_level: evaluate.achievement_other_level, + achievement_strength_desc: evaluate.achievement_strength_desc, + achievement_improve_desc: evaluate.achievement_improve_desc, + conduct1_level: evaluate.conduct1_level, + conduct2_level: evaluate.conduct2_level, + conduct3_level: evaluate.conduct3_level, + conduct4_level: evaluate.conduct4_level, + moral1_level: evaluate.moral1_level, + moral2_level: evaluate.moral2_level, + moral3_level: evaluate.moral3_level, + discipline1_level: evaluate.discipline1_level, + discipline2_level: evaluate.discipline2_level, + discipline3_level: evaluate.discipline3_level, + discipline4_level: evaluate.discipline4_level, + discipline5_level: evaluate.discipline5_level, + behavior_other_desc: evaluate.behavior_other_desc, + behavior_other_level: evaluate.behavior_other_level, + 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: achievements, + }; + } else { + evaluate = await this.evaluateAssessorRepository.find({ + where: { + director_id: director_id, + assign_id, + }, + order: { no: "ASC" }, + }); + + if (!evaluate) { + 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 achievements = await achievementData.map((achievement) => { + return { + ...achievement, + evaluate_expect_desc: achievement.output_desc, + evaluate_output_desc: achievement.output_desc, + }; + }); + + evaluateData[index] = await { + id: element.id, + director_id: element.director_id, + assign_id, + no: Number(element.no), + date_start: element.date_start, + date_finish: element.date_finish, + assessor_dated: element.assessor_dated, + knowledge_level: element.knowledge_level, + skill_level: element.skill_level, + competency_level: element.competency_level, + learn_level: element.learn_level, + apply_level: element.apply_level, + achievement_other_desc: element.achievement_other_desc, + achievement_other_level: element.achievement_other_level, + achievement_strength_desc: element.achievement_strength_desc, + achievement_improve_desc: element.achievement_improve_desc, + conduct1_level: element.conduct1_level, + conduct2_level: element.conduct2_level, + conduct3_level: element.conduct3_level, + conduct4_level: element.conduct4_level, + moral1_level: element.moral1_level, + moral2_level: element.moral2_level, + moral3_level: element.moral3_level, + discipline1_level: element.discipline1_level, + discipline2_level: element.discipline2_level, + discipline3_level: element.discipline3_level, + discipline4_level: element.discipline4_level, + discipline5_level: element.discipline5_level, + behavior_other_desc: element.behavior_other_desc, + behavior_other_level: element.behavior_other_level, + behavior_strength_desc: element.behavior_strength_desc, + behavior_improve_desc: element.behavior_improve_desc, + orientation: element.orientation, + self_learning: element.self_learning, + training_seminar: element.training_seminar, + other_training: element.other_training, + createdAt: element.createdAt, + updatedAt: element.updatedAt, + achievements: achievements, + }; + }) + ); + } + + const assign = await this.assignRepository.findOne({ + where: { + id: assign_id, + }, + }); + + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const experimenteeData = await this.personalRepository.find({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + ], + where: { personal_id: assign.personal_id }, + }); + + const experimentee = await experimenteeData.map((element) => ({ + ...element, + name: element.prefixName + element.firstName + " " + element.lastName, + Oc: element.organization, + })); + + const directorData = await this.assignDirectorRepository.find({ + select: [ + "personal_id", + "dated", + "fullname", + "position", + "posType", + "posLevel", + ], + where: { personal_id: director_id }, + }); + + const directors = await directorData.map((element) => ({ + ...element, + name: element.fullname, + label: `${element.fullname} (${element.position}${element.posLevel})`, + })); + + return new HttpSuccess({ + experimentee: experimentee ? experimentee : null, + person: directors ? directors : null, + assign, + evaluate: evaluateData, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * + * @summary บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * + */ + @Post("commander") + async PostDataCommander( + @Query() assign_id: string, + @Body() requestBody: CreateEvaluateAssessor, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const postData: any = await { + assign_id, + ...requestBody, + director_id, + no: requestBody.evaluate_no, + date_start: requestBody.start_date, + personal_id: assign.personal_id, + + achievement_other_desc: requestBody.achievement_other + ? requestBody.achievement_other.text + : "", + achievement_other_level: requestBody.achievement_other + ? Number(requestBody.achievement_other.level) + : 0, + behavior_other_desc: requestBody.behavio_orther.text, + behavior_other_level: + 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, + self_learning: requestBody.self_learning, + training_seminar: requestBody.training_seminar, + other_training: requestBody.other_training, + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + + const evaluateAssessor = await this.evaluateAssessorRepository.save( + postData, + { + data: request, + } + ); + if (evaluateAssessor) { + await Promise.all( + requestBody.evaluate_expenct_level.map(async (expenct, index) => { + const evaluateAchievement: CreateEvaluateAchievement = await { + evaluate_id: evaluateAssessor.id, + assign_id, + output_id: expenct.id.toString(), + 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 + ), + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + await this.evaluateAchievementRepository.save(evaluateAchievement, { + data: request, + }); + }) + ); + } + + setLogDataDiff(request, { before: null, after: postData }); + + if (Number(requestBody.evaluate_no) < 3) { + // #noted cronjob + // แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง + const dateSaveForm = await findEndDate(2, requestBody.start_date); + const nextNo = await (Number(requestBody.evaluate_no) + 1); + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`, + receiverUserId: director_id, + payload: "", + isSendMail: true, + isSendInbox: true, + receiveDate: dateSaveForm, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } + + /** + * API แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * @summary แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา) + * + */ + @Put("commander") + async UpdateDataCommander( + @Query() assign_id: string, + @Query() evaluate_id: string, + @Body() requestBody: CreateEvaluateAssessor, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); + + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "commander", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + let evaluate = await this.evaluateAssessorRepository.findOne({ + where: { id: evaluate_id }, + }); + + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + } + const before = evaluate; + + evaluate.assessor_dated = requestBody.assessor_dated; + evaluate.knowledge_level = requestBody.knowledge_level; + evaluate.skill_level = requestBody.skill_level; + evaluate.competency_level = requestBody.competency_level; + evaluate.learn_level = requestBody.learn_level; + evaluate.apply_level = requestBody.apply_level; + evaluate.achievement_other_desc = requestBody.achievement_other + ? requestBody.achievement_other.text + : ""; + evaluate.achievement_other_level = + 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; + evaluate.conduct1_level = requestBody.conduct1_level; + evaluate.conduct2_level = requestBody.conduct2_level; + evaluate.conduct3_level = requestBody.conduct3_level; + evaluate.conduct4_level = requestBody.conduct4_level; + evaluate.moral1_level = requestBody.moral1_level; + evaluate.moral2_level = requestBody.moral2_level; + evaluate.moral3_level = requestBody.moral3_level; + evaluate.discipline1_level = requestBody.discipline1_level; + evaluate.discipline2_level = requestBody.discipline2_level; + evaluate.discipline3_level = requestBody.discipline3_level; + evaluate.discipline4_level = requestBody.discipline4_level; + 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; + evaluate.behavior_strength_desc = requestBody.behavior_strength_desc; + evaluate.behavior_improve_desc = requestBody.behavior_improve_desc; + evaluate.orientation = requestBody.orientation; + evaluate.self_learning = requestBody.self_learning; + evaluate.training_seminar = requestBody.training_seminar; + evaluate.other_training = requestBody.other_training; + evaluate.updateUserId = request.user.sub; + evaluate.updateFullName = request.user.name; + + const evaluateAssessor = await this.evaluateAssessorRepository.save( + evaluate, + { + data: request, + } + ); + + if (evaluateAssessor) { + await this.evaluateAchievementRepository.delete({ + evaluate_id, + }); + await Promise.all( + requestBody.evaluate_expenct_level.map(async (expenct, index) => { + const evaluateAchievement: CreateEvaluateAchievement = await { + evaluate_id: evaluateAssessor.id, + assign_id, + output_id: expenct.id.toString(), + 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 + ), + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + await this.evaluateAchievementRepository.save(evaluateAchievement, { + data: request, + }); + }) + ); + } + + setLogDataDiff(request, { before, after: evaluate }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } } diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index ada9864..a847360 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -24,7 +24,10 @@ import { Assign } from "../entities/Assign"; 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/probation/evaluate-result") @@ -32,14 +35,17 @@ import permission from "../interfaces/permission"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" ) 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 ข้อมูลตอนกดสร้างแบบรายงานการประเมินฯ @@ -48,168 +54,205 @@ export class EvaluateResultController extends Controller { * */ @Get("create") - async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { - let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const profile = await (assign.profile - ? { - ...assign.profile, - id: assign.profile.personal_id, - name: - 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) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); - } - - 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.push({ - personal_id: e.personal_id, - dated: e.dated, - name: e.fullname, - label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), - position: e.position, - posType: e.posType, - posLevel: e.posLevel, - }); - } - } - - const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); - - const commander = - commanderData != null - ? { - personal_id: commanderData.personal_id, - dated: commanderData.dated, - name: commanderData.fullname, - label: - commanderData.fullname + - " " + - (commanderData.position - ? `(${commanderData.position}${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.posLevel})` : ""), - position: chairmanData.position, - posType: chairmanData.posType, - posLevel: chairmanData.posLevel, - } - : null; - - const resultData = await this.evaluateChairmanRepository.find({ - select: [ - "develop_orientation_score", - "develop_self_learning_score", - "develop_training_seminar_score", - "evaluate_result", - "no", - ], - where: { + async CreateEvaluate( + @Query() assign_id: string, + @Request() request: RequestWithUser + ) { + try { + let _workflow = await new permission().Workflow( + request, assign_id, - }, - }); + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); - if (!resultData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมินผล"); - } + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } - const result = await Promise.all( - resultData.map(async (e) => { - const check = await this.evaluateResultRepository.count({ where: { assign_id, no: e.no } }); + const profile = await (assign.profile + ? { + ...assign.profile, + id: assign.profile.personal_id, + name: + assign.profile.prefixName + + assign.profile.firstName + + " " + + assign.profile.lastName, + Oc: assign.profile.organization, + } + : null); - const develop_complete = - e.develop_orientation_score > 0 && - e.develop_self_learning_score > 0 && - e.develop_training_seminar_score - ? 1 - : 2; + const directorData = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); - const evaluate_result = e.evaluate_result === 1 ? 1 : 2; + if (!directorData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" + ); + } - let startDate = assign.date_start; - if (e.no === "2") { - const resultNo1 = await this.evaluateResultRepository.findOne({ - select: ["date_finish"], - where: { assign_id, no: "1" }, + 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.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, + label: + e.fullname + + " " + + (e.position ? `(${e.position}${e.posLevel})` : ""), + position: e.position, + posType: e.posType, + posLevel: e.posLevel, }); - startDate = resultNo1?.date_finish ?? assign.date_start; } + } - let endDate: any = assign.date_finish; - if (e.no === "1") { - endDate = findEndDate(3, assign.date_start) ?? assign.date_finish; - } + const commanderData = await (directorData.find( + (x) => x.role == "commander" + ) ?? null); - return { - develop_complete, - evaluate_result, - evaluate_no: Number(e.no), - isResult: check > 0 ? true : false, - start_date: startDate, - end_date: endDate, - }; - }), - ); + const commander = + commanderData != null + ? { + personal_id: commanderData.personal_id, + dated: commanderData.dated, + name: commanderData.fullname, + label: + commanderData.fullname + + " " + + (commanderData.position + ? `(${commanderData.position}${commanderData.posLevel})` + : ""), + position: commanderData.position, + posType: commanderData.posType, + posLevel: commanderData.posLevel, + } + : null; - // const develop_complete = await (resultData.develop_orientation_score > 0 && - // resultData.develop_self_learning_score > 0 && - // resultData.develop_training_seminar_score > 0 - // ? 1 - // : 2); + 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.posLevel})` + : ""), + position: chairmanData.position, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; - // const evaluate_result = await (resultData.evaluate_result == 1 ? 1 : 2); + const resultData = await this.evaluateChairmanRepository.find({ + select: [ + "develop_orientation_score", + "develop_self_learning_score", + "develop_training_seminar_score", + "evaluate_result", + "no", + ], + where: { + assign_id, + }, + }); - // const result = await { - // develop_complete: develop_complete, - // evaluate_result: evaluate_result, - // }; + if (!resultData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลการประเมินผล" + ); + } - return new HttpSuccess({ - person: profile, - assign, - result, - mentors, - commander, - chairman, - }); + const result = await Promise.all( + resultData.map(async (e) => { + const check = await this.evaluateResultRepository.count({ + where: { assign_id, no: e.no }, + }); + + const develop_complete = + e.develop_orientation_score > 0 && + e.develop_self_learning_score > 0 && + e.develop_training_seminar_score + ? 1 + : 2; + + const evaluate_result = e.evaluate_result === 1 ? 1 : 2; + + let startDate = assign.date_start; + if (e.no === "2") { + const resultNo1 = await this.evaluateResultRepository.findOne({ + select: ["date_finish"], + where: { assign_id, no: "1" }, + }); + startDate = resultNo1?.date_finish ?? assign.date_start; + } + + let endDate: any = assign.date_finish; + if (e.no === "1") { + endDate = findEndDate(3, assign.date_start) ?? assign.date_finish; + } + + return { + develop_complete, + evaluate_result, + evaluate_no: Number(e.no), + isResult: check > 0 ? true : false, + start_date: startDate, + end_date: endDate, + }; + }) + ); + + // const develop_complete = await (resultData.develop_orientation_score > 0 && + // resultData.develop_self_learning_score > 0 && + // resultData.develop_training_seminar_score > 0 + // ? 1 + // : 2); + + // const evaluate_result = await (resultData.evaluate_result == 1 ? 1 : 2); + + // const result = await { + // develop_complete: develop_complete, + // evaluate_result: evaluate_result, + // }; + + return new HttpSuccess({ + person: profile, + assign, + result, + mentors, + commander, + chairman, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -222,152 +265,176 @@ export class EvaluateResultController extends Controller { async GetEvaluate( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string, + @Query() evaluate_no?: string ) { - await new permission().PermissionGet(request, "SYS_PROBATION"); + try { + await new permission().PermissionGet(request, "SYS_PROBATION"); - // ต้องปรับเป็น id ของคนที่ access เข้ามา - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { - assign_id, - role: "chairman", - }, - }); - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); - } - const director_id = director.personal_id; - - const evaluate = await this.evaluateResultRepository.findOne({ - where: { - director_id, - assign_id, - no: evaluate_no ?? "1", - }, - }); - - if (!evaluate) { - return new HttpSuccess(null); - } - - const assign = await this.assignRepository.findOne({ - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const experimenteeData = await this.personalRepository.findOne({ - select: [ - "personal_id", - "prefixName", - "firstName", - "lastName", - "positionName", - "positionLevelName", - "organization", - "orgRootName", - ], - where: { personal_id: assign.personal_id }, - }); - - if (!experimenteeData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - - const splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const experimentee = await { - ...experimenteeData, - name: - experimenteeData.prefixName + experimenteeData.firstName + " " + experimenteeData.lastName, - PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - }; - - const directorData = await this.assignDirectorRepository.find({ - where: { assign_id }, - order: { ordering: "ASC" }, - }); - - if (!directorData) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); - } - - 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.push({ - personal_id: e.personal_id, - dated: e.dated, - name: e.fullname, - label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), - position: e.position + e.posLevel, - posType: e.posType, - posLevel: e.posLevel, - }); + // ต้องปรับเป็น id ของคนที่ access เข้ามา + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "chairman", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); } - } + const director_id = director.personal_id; - // const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); + const evaluate = await this.evaluateResultRepository.findOne({ + where: { + director_id, + assign_id, + no: evaluate_no ?? "1", + }, + }); - // const commander = - // commanderData != null - // ? { - // personal_id: commanderData.personal_id, - // dated: commanderData.dated, - // name: commanderData.fullname, - // label: - // commanderData.fullname + - // " " + - // (commanderData.position - // ? `(${commanderData.position}${commanderData.posLevel})` - // : ""), - // position: commanderData.position + commanderData.posLevel, - // posType: commanderData.posType, - // posLevel: commanderData.posLevel, - // } - // : null; + if (!evaluate) { + return new HttpSuccess(null); + } - const commander = { - dated: evaluate.authority_dated, - name: evaluate.authority_name, + const assign = await this.assignRepository.findOne({ + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } - position: evaluate.authority_pos + evaluate.authority_level, - posType: evaluate.authority_type, - posLevel: evaluate.authority_level, - }; - 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, + const experimenteeData = await this.personalRepository.findOne({ + select: [ + "personal_id", + "prefixName", + "firstName", + "lastName", + "positionName", + "positionLevelName", + "organization", + "orgRootName", + ], + where: { personal_id: assign.personal_id }, + }); + + if (!experimenteeData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + + const splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const experimentee = await { + ...experimenteeData, + name: + experimenteeData.prefixName + + experimenteeData.firstName + + " " + + experimenteeData.lastName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + }; + + const directorData = await this.assignDirectorRepository.find({ + where: { assign_id }, + order: { ordering: "ASC" }, + }); + + if (!directorData) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" + ); + } + + 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.push({ + personal_id: e.personal_id, + dated: e.dated, + name: e.fullname, label: - chairmanData.fullname + + e.fullname + " " + - (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), - position: chairmanData.position + chairmanData.posLevel, - posType: chairmanData.posType, - posLevel: chairmanData.posLevel, - } - : null; + (e.position ? `(${e.position}${e.posLevel})` : ""), + position: e.position + e.posLevel, + posType: e.posType, + posLevel: e.posLevel, + }); + } + } - return new HttpSuccess({ - commander, - chairman, - mentors, - experimentee, - assign, - evaluate: evaluate ? evaluate : null, - }); + // const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); + + // const commander = + // commanderData != null + // ? { + // personal_id: commanderData.personal_id, + // dated: commanderData.dated, + // name: commanderData.fullname, + // label: + // commanderData.fullname + + // " " + + // (commanderData.position + // ? `(${commanderData.position}${commanderData.posLevel})` + // : ""), + // position: commanderData.position + commanderData.posLevel, + // posType: commanderData.posType, + // posLevel: commanderData.posLevel, + // } + // : null; + + const commander = { + dated: evaluate.authority_dated, + name: evaluate.authority_name, + + position: evaluate.authority_pos + evaluate.authority_level, + posType: evaluate.authority_type, + posLevel: evaluate.authority_level, + }; + 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.posLevel})` + : ""), + position: chairmanData.position + chairmanData.posLevel, + posType: chairmanData.posType, + posLevel: chairmanData.posLevel, + } + : null; + + return new HttpSuccess({ + commander, + chairman, + mentors, + experimentee, + assign, + evaluate: evaluate ? evaluate : null, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -380,52 +447,62 @@ 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"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const director = await this.assignDirectorRepository.findOne({ - select: ["personal_id"], - where: { + const director = await this.assignDirectorRepository.findOne({ + select: ["personal_id"], + where: { + assign_id, + role: "chairman", + }, + }); + if (!director) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + } + + const director_id = director.personal_id; + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const postData: any = await { assign_id, - role: "chairman", - }, - }); - if (!director) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล"); + ...requestBody, + director_id, + no: requestBody.evaluate_no, + personal_id: assign.personal_id, + date_start: requestBody.start_date, + expand_month: + requestBody.pass_result == 3 ? Number(requestBody.expand_month) : 0, + + createdUserId: request.user.sub, + createdFullName: request.user.name, + updateUserId: request.user.sub, + updateFullName: request.user.name, + }; + + await this.evaluateResultRepository.save(postData, { + data: request, + }); + setLogDataDiff(request, { before: null, after: postData }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const director_id = director.personal_id; - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - - const postData: any = await { - assign_id, - ...requestBody, - director_id, - no: requestBody.evaluate_no, - personal_id: assign.personal_id, - date_start: requestBody.start_date, - expand_month: requestBody.pass_result == 3 ? Number(requestBody.expand_month) : 0, - - createdUserId: request.user.sub, - createdFullName: request.user.name, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }; - - await this.evaluateResultRepository.save(postData, { - data: request, - }); - setLogDataDiff(request, { before: null, after: postData }); - - return new HttpSuccess(); } /** @@ -438,62 +515,74 @@ export class EvaluateResultController extends Controller { async PatchData( @Query() assign_id: string, @Query() evaluate_no: number | string, - @Request() request: RequestWithUser, + @Request() request: RequestWithUser ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + + const result = await this.evaluateResultRepository.findOne({ + where: { assign_id, no: evaluate_no.toString() }, + }); + + if (!result) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลผลการประเมิน" + ); + } + + const personal = await this.personalRepository.findOne({ + where: { personal_id: assign.personal_id }, + }); + + if (!personal) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + personal.probation_status = + result.pass_result == 1 + ? 2 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ + : result.pass_result == 2 + ? 3 // ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ + : result.pass_result == 4 + ? 1 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ทดลองปฏิบัติหน้าที่ราชการต่อไป + : personal.probation_status; + + if (result.pass_result == 3) { + personal.probation_status = 7; + // #noti ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ กรณีขยายระยะเวลา + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", + body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ เห็นควรให้ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการต่อไปอีก ${result.expand_month} เดือน`, + receiverUserId: assign.personal_id, + payload: "", + isSendMail: false, + isSendInbox: true, + isSendNotification: true, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } + + await this.personalRepository.save(personal, { data: request }); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - const result = await this.evaluateResultRepository.findOne({ - where: { assign_id, no: evaluate_no.toString() }, - }); - - if (!result) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผลการประเมิน"); - } - - const personal = await this.personalRepository.findOne({ - where: { personal_id: assign.personal_id }, - }); - - if (!personal) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - personal.probation_status = - result.pass_result == 1 - ? 2 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ - : result.pass_result == 2 - ? 3 // ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ - : result.pass_result == 4 - ? 1 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ทดลองปฏิบัติหน้าที่ราชการต่อไป - : personal.probation_status; - - if (result.pass_result == 3) { - personal.probation_status = 7; - // #noti ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ กรณีขยายระยะเวลา - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", - body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ เห็นควรให้ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการต่อไปอีก ${result.expand_month} เดือน`, - receiverUserId: assign.personal_id, - payload: "", - isSendMail: false, - isSendInbox: true, - isSendNotification: true, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - } - - await this.personalRepository.save(personal, { data: request }); - return new HttpSuccess(); } /** @@ -507,82 +596,91 @@ 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"); + try { + await new permission().PermissionUpdate(request, "SYS_PROBATION"); - let evaluate = await this.evaluateResultRepository.findOne({ - where: { id: evaluate_id }, - }); + let evaluate = await this.evaluateResultRepository.findOne({ + where: { id: evaluate_id }, + }); - const before = evaluate; + const before = evaluate; - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + if (!evaluate) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน"); + } + + evaluate.date_start = requestBody.start_date; + evaluate.date_finish = requestBody.date_finish; + evaluate.develop_complete = requestBody.develop_complete; + evaluate.pass_result = requestBody.pass_result; + evaluate.expand_month = + requestBody.pass_result && requestBody.pass_result == 3 + ? Number(requestBody.expand_month) + : 0; + evaluate.reson = requestBody.reson; + evaluate.chairman_dated = requestBody.chairman_dated; + + // evaluate.director1_dated = requestBody.director1_dated; + // evaluate.director2_dated = requestBody.director2_dated; + evaluate.updateUserId = request.user.sub; + evaluate.updateFullName = request.user.name; + + await this.evaluateResultRepository.save(evaluate, { data: request }); + setLogDataDiff(request, { before, after: evaluate }); + + const assign = await this.assignRepository.findOne({ + relations: ["profile"], + where: { id: assign_id }, + }); + if (!assign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบข้อมูลแบบมอบหมายงาน" + ); + } + const personal = await this.personalRepository.findOne({ + where: { personal_id: assign.personal_id }, + }); + + if (!personal) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } + personal.probation_status = + requestBody.pass_result == 1 + ? 2 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ + : requestBody.pass_result == 2 + ? 3 // ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ + : requestBody.pass_result == 4 + ? 1 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ทดลองปฏิบัติหน้าที่ราชการต่อไป + : personal.probation_status; + + if (requestBody.pass_result == 3) { + personal.probation_status = 7; + // #noti ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ กรณีขยายระยะเวลา + await new CallAPI() + .PostData(request, "/placement/noti", { + subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", + body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ เห็นควรให้ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการต่อไปอีก ${requestBody.expand_month} เดือน`, + receiverUserId: assign.personal_id, + payload: "", + isSendMail: false, + isSendInbox: true, + isSendNotification: true, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + } + + await this.personalRepository.save(personal, { data: request }); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - evaluate.date_start = requestBody.start_date; - evaluate.date_finish = requestBody.date_finish; - evaluate.develop_complete = requestBody.develop_complete; - evaluate.pass_result = requestBody.pass_result; - evaluate.expand_month = - requestBody.pass_result && requestBody.pass_result == 3 - ? Number(requestBody.expand_month) - : 0; - evaluate.reson = requestBody.reson; - evaluate.chairman_dated = requestBody.chairman_dated; - - // evaluate.director1_dated = requestBody.director1_dated; - // evaluate.director2_dated = requestBody.director2_dated; - evaluate.updateUserId = request.user.sub; - evaluate.updateFullName = request.user.name; - - await this.evaluateResultRepository.save(evaluate, { data: request }); - setLogDataDiff(request, { before, after: evaluate }); - - const assign = await this.assignRepository.findOne({ - relations: ["profile"], - where: { id: assign_id }, - }); - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } - const personal = await this.personalRepository.findOne({ - where: { personal_id: assign.personal_id }, - }); - - if (!personal) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); - } - personal.probation_status = - requestBody.pass_result == 1 - ? 2 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้รับราชการต่อ - : requestBody.pass_result == 2 - ? 3 // ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ออกจากราชการ - : requestBody.pass_result == 4 - ? 1 // ไม่ต่ำกว่ามาตรฐานที่กำหนด เห็นควรให้ทดลองปฏิบัติหน้าที่ราชการต่อไป - : personal.probation_status; - - if (requestBody.pass_result == 3) { - personal.probation_status = 7; - // #noti ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ กรณีขยายระยะเวลา - await new CallAPI() - .PostData(request, "/placement/noti", { - subject: "ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ", - body: `ผลการประเมินการทดลองปฏิบัติหน้าที่ราชการ เห็นควรให้ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการต่อไปอีก ${requestBody.expand_month} เดือน`, - receiverUserId: assign.personal_id, - payload: "", - isSendMail: false, - isSendInbox: true, - isSendNotification: true, - }) - .catch((error) => { - console.error("Error calling API:", error); - }); - } - - await this.personalRepository.save(personal, { data: request }); - - return new HttpSuccess(); } } diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index e8ddb63..95518a0 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -1,246 +1,359 @@ -import { Controller, Post, Route, Security, Tags, Body, Request, SuccessResponse, Response, Get, Query } 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 { setLogDataDiff } from "../interfaces/utils" -import { Personal, PostPersonal } from "../entities/Personal" -import permission from "../interfaces/permission" -import { Assign } from "../entities/Assign" -import { Brackets } from "typeorm" +import { + Controller, + Post, + Route, + Security, + Tags, + Body, + Request, + SuccessResponse, + Response, + Get, + Query, +} 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 { setLogDataDiff } from "../interfaces/utils"; +import { Personal, PostPersonal } from "../entities/Personal"; +import permission from "../interfaces/permission"; +import { Assign } from "../entities/Assign"; +import { Brackets } from "typeorm"; @Route("api/v1/probation/personal") @Tags("Personal") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class PersonalController extends Controller { - private personalRepository = AppDataSource.getRepository(Personal) - private assignRepository = AppDataSource.getRepository(Assign) + private personalRepository = AppDataSource.getRepository(Personal); + private assignRepository = AppDataSource.getRepository(Assign); - /** - * API ข้อมูลบุคคลในระบบทดลองงาน - * - * @summary เพิ่มคนเข้าระบบทดลองงาน - * - */ - @Post("add") - async AddPersonal(@Body() requestBody: PostPersonal, @Request() request: RequestWithUser) { - await new permission().PermissionCreate(request, "SYS_PROBATION") + /** + * API ข้อมูลบุคคลในระบบทดลองงาน + * + * @summary เพิ่มคนเข้าระบบทดลองงาน + * + */ + @Post("add") + async AddPersonal( + @Body() requestBody: PostPersonal, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionCreate(request, "SYS_PROBATION"); - const checkPersonal: number = await this.personalRepository.count({ - where: { personal_id: requestBody.id }, - }) - if (checkPersonal > 0) { - throw new HttpError(HttpStatusCode.BAD_REQUEST, "ผู้ทดลองปฏิบัติหน้าที่ราชการนี้มีอยู่แล้ว") - } + const checkPersonal: number = await this.personalRepository.count({ + where: { personal_id: requestBody.id }, + }); + if (checkPersonal > 0) { + 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.probation_status = 1 - personalData.createdUserId = request.user.sub - personalData.createdFullName = request.user.name - personalData.updateUserId = request.user.sub - personalData.updateFullName = request.user.name + const personalData = Object.assign(new Personal()); + personalData.personal_id = requestBody.id; + personalData.order_number = requestBody.order_number + ? requestBody.order_number + : ""; + personalData.probation_status = 1; + personalData.createdUserId = request.user.sub; + personalData.createdFullName = request.user.name; + personalData.updateUserId = request.user.sub; + personalData.updateFullName = request.user.name; - personalData.idcard = requestBody.idcard - personalData.prefixName = requestBody.prefix - 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.positionLineName = requestBody.posLineName - personalData.positionTypeName = requestBody.posTypeName - personalData.posNo = requestBody.posNo ? requestBody.posNo : "" - personalData.orgRootName = requestBody.orgRootName - personalData.organization = organization + personalData.idcard = requestBody.idcard; + personalData.prefixName = requestBody.prefix; + 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.positionLineName = requestBody.posLineName; + personalData.positionTypeName = requestBody.posTypeName; + personalData.posNo = requestBody.posNo ? requestBody.posNo : ""; + personalData.orgRootName = requestBody.orgRootName; + personalData.organization = organization; - personalData.root = requestBody.root - personalData.child1 = requestBody.child1 - personalData.child2 = requestBody.child2 - personalData.child3 = requestBody.child3 - personalData.child4 = requestBody.child4 + personalData.root = requestBody.root; + personalData.child1 = requestBody.child1; + personalData.child2 = requestBody.child2; + personalData.child3 = requestBody.child3; + personalData.child4 = requestBody.child4; - personalData.rootDna = requestBody.rootDna - personalData.child1Dna = requestBody.child1Dna - personalData.child2Dna = requestBody.child2Dna - personalData.child3Dna = requestBody.child3Dna - personalData.child4Dna = requestBody.child4Dna + personalData.rootDna = requestBody.rootDna; + personalData.child1Dna = requestBody.child1Dna; + personalData.child2Dna = requestBody.child2Dna; + personalData.child3Dna = requestBody.child3Dna; + personalData.child4Dna = requestBody.child4Dna; - const before = null - const personal = await this.personalRepository.save(personalData, { - data: request, - }) - setLogDataDiff(request, { before, after: personal }) + const before = null; + const personal = await this.personalRepository.save(personalData, { + data: request, + }); + setLogDataDiff(request, { before, after: personal }); - return new HttpSuccess() - } + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API รายการบุคคลในระบบทดลองงาน - * - * @summary รายชื่อคนที่อยู่ในระบบทดลองงาน - * - */ - @Get("list") - async ListPersonal(@Query() status: string = "", @Query() keyword: string = "", @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, @Request() request: RequestWithUser) { - await new permission().PermissionList(request, "SYS_PROBATION") - const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION") + /** + * API รายการบุคคลในระบบทดลองงาน + * + * @summary รายชื่อคนที่อยู่ในระบบทดลองงาน + * + */ + @Get("list") + async ListPersonal( + @Query() status: string = "", + @Query() keyword: string = "", + @Query("page") page: number = 1, + @Query("pageSize") pageSize: number = 10, + @Request() request: RequestWithUser + ) { + try { + await new permission().PermissionList(request, "SYS_PROBATION"); + const _data = await new permission().PermissionOrgList( + request, + "SYS_PROBATION" + ); - const conditions: any = {} - if (status) { - conditions.probation_status = status - } + const conditions: any = {}; + if (status) { + conditions.probation_status = status; + } - if (_data.root != undefined && _data.root != null && _data.root[0] != null) { - conditions.root = _data.root - } + if ( + _data.root != undefined && + _data.root != null && + _data.root[0] != null + ) { + conditions.root = _data.root; + } - if (_data.child1 != undefined && _data.child1 != null && _data.child1[0] != null) { - conditions.child1 = _data.child1 - } + if ( + _data.child1 != undefined && + _data.child1 != null && + _data.child1[0] != null + ) { + conditions.child1 = _data.child1; + } - if (_data.child2 != undefined && _data.child2 != null && _data.child2[0] != null) { - conditions.child2 = _data.child2 - } + if ( + _data.child2 != undefined && + _data.child2 != null && + _data.child2[0] != null + ) { + conditions.child2 = _data.child2; + } - if (_data.child3 != undefined && _data.child3 != null && _data.child3[0] != null) { - conditions.child3 = _data.child3 - } + if ( + _data.child3 != undefined && + _data.child3 != null && + _data.child3[0] != null + ) { + conditions.child3 = _data.child3; + } - if (_data.child4 != undefined && _data.child4 != null && _data.child4[0] != null) { - conditions.child4 = _data.child4 - } + if ( + _data.child4 != undefined && + _data.child4 != null && + _data.child4[0] != null + ) { + conditions.child4 = _data.child4; + } - const searchKeyword = await (keyword ? keyword.trim() : null) + const searchKeyword = await (keyword ? keyword.trim() : null); - const [lists, total] = await AppDataSource.getRepository(Personal) - .createQueryBuilder("personal") - .where(conditions) - .andWhere( - new Brackets(qb => { - qb.orWhere(searchKeyword ? `CONCAT(prefixName, firstName," ",lastName) like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - qb.orWhere(searchKeyword ? `positionName like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - qb.orWhere(searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - qb.orWhere(searchKeyword ? `organization like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - qb.orWhere(searchKeyword ? `order_number like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - }) - ) - .orderBy("updatedAt", "DESC") - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount() + const [lists, total] = await AppDataSource.getRepository(Personal) + .createQueryBuilder("personal") + .where(conditions) + .andWhere( + new Brackets((qb) => { + qb.orWhere( + searchKeyword + ? `CONCAT(prefixName, firstName," ",lastName) like '%${keyword}%'` + : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `positionName like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `organization like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `order_number like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + }) + ) + .orderBy("updatedAt", "DESC") + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); - if (!lists) { - throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, "ไม่สามารถแสดงข้อมูลได้") - } + if (!lists) { + throw new HttpError( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "ไม่สามารถแสดงข้อมูลได้" + ); + } - let result: any = [] + let result: any = []; - for (let i = 0; i < lists.length; i++) { - const probation_no = await this.assignRepository.count({ - where: { personal_id: lists[i].personal_id }, - }) + for (let i = 0; i < lists.length; i++) { + const probation_no = await this.assignRepository.count({ + where: { personal_id: lists[i].personal_id }, + }); - await result.push({ - personal_id: lists[i].personal_id, - ordering: i + 1, - name: lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, - prefixName: lists[i].prefixName, - firstName: lists[i].firstName, - lastName: lists[i].lastName, - idcard: lists[i].idcard, - position_line: lists[i].positionName, - position_level: lists[i].positionLevelName, - position_type: lists[i].positionTypeName, - organization: lists[i].organization, - probation_no: probation_no, - order_number: lists[i].order_number, - probation_status: lists[i].probation_status, - }) - } - // await Promise.all( - // lists.map(async (item, index) => { - // const probation_no = await this.assignRepository.count({ - // where: { - // personal_id: item.personal_id, - // }, - // }); + await result.push({ + personal_id: lists[i].personal_id, + ordering: i + 1, + name: + lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, + prefixName: lists[i].prefixName, + firstName: lists[i].firstName, + lastName: lists[i].lastName, + idcard: lists[i].idcard, + position_line: lists[i].positionName, + position_level: lists[i].positionLevelName, + position_type: lists[i].positionTypeName, + organization: lists[i].organization, + probation_no: probation_no, + order_number: lists[i].order_number, + probation_status: lists[i].probation_status, + }); + } + // await Promise.all( + // lists.map(async (item, index) => { + // const probation_no = await this.assignRepository.count({ + // where: { + // personal_id: item.personal_id, + // }, + // }); - // await result.push({ - // personal_id: item.personal_id, - // ordering: index + 1, - // name: item.prefixName + item.firstName + " " + item.lastName, - // idcard: item.idcard, - // // prefixName: item.prefixName, - // // firstName: item.firstName, - // // lastName: item.lastName, - // position_line: item.positionName, - // position_level: item.positionLevelName, - // position_type: item.positionTypeName, - // organization: item.organization, - // probation_no: probation_no, - // order_number: item.order_number, - // probation_status: item.probation_status, - // }); - // }), - // ); + // await result.push({ + // personal_id: item.personal_id, + // ordering: index + 1, + // name: item.prefixName + item.firstName + " " + item.lastName, + // idcard: item.idcard, + // // prefixName: item.prefixName, + // // firstName: item.firstName, + // // lastName: item.lastName, + // position_line: item.positionName, + // position_level: item.positionLevelName, + // position_type: item.positionTypeName, + // organization: item.organization, + // probation_no: probation_no, + // order_number: item.order_number, + // probation_status: item.probation_status, + // }); + // }), + // ); - return new HttpSuccess({ data: result, total: total }) - } + return new HttpSuccess({ data: result, total: total }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API ข้อมูลบุคคลในระบบทดลองงาน - * - * @summary ข้อมูลคนที่อยูาในระบบทดลองงาน - * - */ - @Get("") - async GetPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { - let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION") - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION") - const person = await this.personalRepository.findOne({ - where: { personal_id: personal_id }, - }) + /** + * API ข้อมูลบุคคลในระบบทดลองงาน + * + * @summary ข้อมูลคนที่อยูาในระบบทดลองงาน + * + */ + @Get("") + async GetPersonal( + @Request() request: RequestWithUser, + @Query() personal_id: string + ) { + try { + let _workflow = await new permission().Workflow( + request, + personal_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); + const person = await this.personalRepository.findOne({ + where: { personal_id: personal_id }, + }); - if (!person) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") - } + if (!person) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + } - const probation_no = await this.assignRepository.count({ - where: { personal_id: person.personal_id }, - }) + const probation_no = await this.assignRepository.count({ + where: { personal_id: person.personal_id }, + }); - const result = await { - personal_id: person.personal_id, - name: person.prefixName + person.firstName + " " + person.lastName, - position_line: person.positionName, - position_level: person.positionLevelName, - position_type: person.positionTypeName, - organization: person.organization, - probation_no: probation_no, - order_number: person.order_number, - probation_status: person.probation_status, - } + const result = await { + personal_id: person.personal_id, + name: person.prefixName + person.firstName + " " + person.lastName, + position_line: person.positionName, + position_level: person.positionLevelName, + position_type: person.positionTypeName, + organization: person.organization, + probation_no: probation_no, + order_number: person.order_number, + probation_status: person.probation_status, + }; - return new HttpSuccess(result) - } + return new HttpSuccess(result); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } } diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 6e9d082..c436a4e 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -70,61 +70,67 @@ export class ReportController extends Controller { @Query() assign_id: string, @Query() evaluate_no: number = 1 ) { - const evaluate = await this.evaluateChairmanRepository.findOne({ - where: { assign_id, no: evaluate_no.toString() }, - }); + try { + const evaluate = await this.evaluateChairmanRepository.findOne({ + where: { assign_id, no: evaluate_no.toString() }, + }); - const result = await this.evaluateResultRepository.findOne({ - where: { assign_id, no: evaluate_no.toString() }, - }); + const result = await this.evaluateResultRepository.findOne({ + where: { assign_id, no: evaluate_no.toString() }, + }); - if (!evaluate || !result) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ" - ); + 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))) / 4; + const develop_total_percent = + (await (Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_self_learning_percent) + + Number(evaluate.develop_training_seminar_percent) + + Number(evaluate.develop_other_training_percent))) / 4; + + 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); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - 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))) / 4; - const develop_total_percent = - (await (Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_self_learning_percent) + - Number(evaluate.develop_training_seminar_percent) + - Number(evaluate.develop_other_training_percent))) / 4; - - 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); } /** @@ -135,30 +141,36 @@ export class ReportController extends Controller { */ @Get("pass") async GetPass() { - const lists = await this.personalRepository.find({ - where: { probation_status: 2 }, - }); + try { + 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, + 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 }, }); - }) - ); - return new HttpSuccess(data); + if (assign) + data.push({ + person: { + id: list.personal_id, + name: `${list.prefixName}${list.firstName} ${list.lastName}`, + }, + assign, + }); + }) + ); + + return new HttpSuccess(data); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -169,30 +181,36 @@ export class ReportController extends Controller { */ @Get("not-pass") async GetDataNotPass() { - const lists = await this.personalRepository.find({ - where: { probation_status: 3 }, - }); + try { + 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, + 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 }, }); - }) - ); - return new HttpSuccess(data); + if (assign) + data.push({ + person: { + id: list.personal_id, + name: `${list.prefixName}${list.firstName} ${list.lastName}`, + }, + assign, + }); + }) + ); + + return new HttpSuccess(data); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -204,12 +222,18 @@ export class ReportController extends Controller { @Get("expand") async GetDataExpand() { - const data = await this.personalRepository.find({ - select: ["personal_id"], - where: { probation_status: 7 }, - }); + try { + const data = await this.personalRepository.find({ + select: ["personal_id"], + where: { probation_status: 7 }, + }); - return new HttpSuccess(data); + return new HttpSuccess(data); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -224,43 +248,49 @@ export class ReportController extends Controller { @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); + try { + const personal = await this.personalRepository.findOne({ + where: { personal_id }, }); + const before = personal; - return new HttpSuccess(); + 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(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } /** @@ -275,23 +305,29 @@ export class ReportController extends Controller { @Body() reqBody: { status: number }, @Request() request: RequestWithUser ) { - const personal = await this.personalRepository.findOne({ - where: { personal_id }, - }); - const before = personal; + try { + const personal = await this.personalRepository.findOne({ + where: { personal_id }, + }); + const before = personal; - if (!personal) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); + 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(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - 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(); } /** @@ -302,308 +338,317 @@ export class ReportController extends Controller { */ @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 + directorData.posLevel, - }; - - const achievements = await this.evaluateAchievementRepository.find({ - select: [ - "evaluate_expect_level", - "evaluate_output_level", - "output_desc", - "output_id", - "assign_id", - ], - where: { evaluate_id: evaluate.id }, - order: { updatedAt: "ASC" }, - }); - - if (!achievements) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); - } - - let evaluate_expect_level: any = []; - let evaluate_output_level: any = []; - for (let index = 0; index < achievements.length; index++) { - const element = achievements[index]; - - const outputData = await this.assignOutputRepository.findOne({ - select: ["output_desc"], - where: { id: Number(element.output_id), assign_id: element.assign_id }, - }); - await evaluate_expect_level.push({ - title: outputData?.output_desc ?? "-", - 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 ? "/" : "", + try { + const evaluate = await this.evaluateAssessorRepository.findOne({ + where: { id }, }); - await evaluate_output_level.push({ - title: element.output_desc, - 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 ? "/" : "", + 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 + directorData.posLevel, + }; + + const achievements = await this.evaluateAchievementRepository.find({ + select: [ + "evaluate_expect_level", + "evaluate_output_level", + "output_desc", + "output_id", + "assign_id", + ], + where: { evaluate_id: evaluate.id }, + order: { updatedAt: "ASC" }, + }); + + if (!achievements) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + } + + let evaluate_expect_level: any = []; + let evaluate_output_level: any = []; + for (let index = 0; index < achievements.length; index++) { + const element = achievements[index]; + + const outputData = await this.assignOutputRepository.findOne({ + select: ["output_desc"], + where: { + id: Number(element.output_id), + assign_id: element.assign_id, + }, + }); + await evaluate_expect_level.push({ + title: outputData?.output_desc ?? "-", + 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 ? "/" : "", + }); + + await evaluate_output_level.push({ + title: element.output_desc, + 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 ? "/" : "", + }); + } + + let achievement = { + evaluate_expect_level: evaluate_expect_level, + evaluate_output_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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + const data = await { + experimentee: experimentee ? experimentee : null, + director: director ? director : null, + assign, + evaluate: evaluateData, + }; + return new HttpSuccess(data); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - let achievement = { - evaluate_expect_level: evaluate_expect_level, - evaluate_output_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 splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, - }; - - const data = await { - experimentee: experimentee ? experimentee : null, - director: director ? director : null, - assign, - evaluate: evaluateData, - }; - return new HttpSuccess(data); } /** @@ -617,261 +662,267 @@ export class ReportController extends Controller { @Query() id: string, @Request() request: RequestWithUser ) { - const evaluate = await this.evaluateCommanderRepository.findOne({ - where: { id }, - }); + try { + const evaluate = await this.evaluateCommanderRepository.findOne({ + where: { id }, + }); - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + 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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + 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 + commanderData.posLevel, + }; + + return new HttpSuccess({ + experimentee: experimentee ? experimentee : null, + commander: commander ? commander : null, + assign, + evaluate: evaluateData, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - 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 splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, - }; - - 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 + commanderData.posLevel, - }; - - return new HttpSuccess({ - experimentee: experimentee ? experimentee : null, - commander: commander ? commander : null, - assign, - evaluate: evaluateData, - }); } /** @@ -885,292 +936,300 @@ export class ReportController extends Controller { @Query() id: string, @Request() request: RequestWithUser ) { - const evaluate = await this.evaluateChairmanRepository.findOne({ - where: { id }, - }); + try { + const evaluate = await this.evaluateChairmanRepository.findOne({ + where: { id }, + }); - if (!evaluate) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); + 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 splitOc = await experimenteeData.organization.split(" "); + const splitOcAmount = await splitOc.length; + const organization = await experimenteeData.organization.replace( + /\//g, + " " + ); + + const experimentee = await { + ...experimenteeData, + organization: organization, + name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, + PositionLevelName: experimenteeData.positionLevelName, + PositionLineName: experimenteeData.positionLineName, + Position: experimenteeData.positionName, + Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", + OrganizationOrganization: + splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + Oc: experimenteeData.orgRootName, + PositionLevel: + experimenteeData.positionName + experimenteeData.positionLevelName, + }; + + 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 + element.posLevel, + }; + }) + ); + + 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, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); } - - 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 splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); - - const experimentee = await { - ...experimenteeData, - organization: organization, - name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, - PositionLevelName: experimenteeData.positionLevelName, - PositionLineName: experimenteeData.positionLineName, - Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", - Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, - }; - - 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 + element.posLevel, - }; - }) - ); - - 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") @@ -1195,41 +1254,50 @@ export class ReportController extends Controller { }[]; } ) { - await new CallAPI() - .PostData(request, "/org/command/excexute/salary-probation", { - data: body.refIds.map((v) => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - }) - .then(async (res) => { - const lists = await this.personalRepository.find({ - where: { - probation_status: 8, - personal_id: In(body.refIds.map((x) => x.refId)), - }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 9; - await this.personalRepository.save(list); - }) - ); - }) - .catch(() => {}); - return new HttpSuccess(); + try { + await new CallAPI().PostData( + request, + "/org/command/excexute/salary-probation", + { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + } + ); + + const lists = await this.personalRepository.find({ + where: { + probation_status: 8, + personal_id: In(body.refIds.map((x) => x.refId)), + }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 9; + await this.personalRepository.save(list); + }) + ); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command11/officer/report") public async command11( @Request() req: RequestWithUser, @@ -1238,18 +1306,25 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 2, personal_id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 8; - await this.personalRepository.save(list); - }) - ); + try { + const lists = await this.personalRepository.find({ + where: { probation_status: 2, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 8; + await this.personalRepository.save(list); + }) + ); - return new HttpSuccess(); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command11/officer/report/delete") public async command11Delete( @Request() req: RequestWithUser, @@ -1258,17 +1333,23 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 2; - await this.personalRepository.save(list); - }) - ); + try { + const lists = await this.personalRepository.find({ + where: { probation_status: 8, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 2; + await this.personalRepository.save(list); + }) + ); - return new HttpSuccess(); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Post("command12/officer/report/excecute") @@ -1293,42 +1374,51 @@ export class ReportController extends Controller { }[]; } ) { - await new CallAPI() - .PostData(request, "/org/command/excexute/salary-probation-leave", { - data: body.refIds.map((v) => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - isGovernment: false, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - }) - .then(async (res) => { - const lists = await this.personalRepository.find({ - where: { - probation_status: 8, - personal_id: In(body.refIds.map((x) => x.refId)), - }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 9; - await this.personalRepository.save(list); - }) - ); - }) - .catch(() => {}); - return new HttpSuccess(); + try { + await new CallAPI().PostData( + request, + "/org/command/excexute/salary-probation-leave", + { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + isGovernment: false, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + } + ); + + const lists = await this.personalRepository.find({ + where: { + probation_status: 8, + personal_id: In(body.refIds.map((x) => x.refId)), + }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 9; + await this.personalRepository.save(list); + }) + ); + + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command12/officer/report") public async command12( @Request() req: RequestWithUser, @@ -1337,17 +1427,24 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 3, personal_id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 8; - await this.personalRepository.save(list); - }) - ); - return new HttpSuccess(); + try { + const lists = await this.personalRepository.find({ + where: { probation_status: 3, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 8; + await this.personalRepository.save(list); + }) + ); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command12/officer/report/delete") public async command12Delete( @Request() req: RequestWithUser, @@ -1356,16 +1453,22 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.personalRepository.find({ - where: { probation_status: 8, personal_id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.probation_status = 3; - await this.personalRepository.save(list); - }) - ); - return new HttpSuccess(); + try { + const lists = await this.personalRepository.find({ + where: { probation_status: 8, personal_id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.probation_status = 3; + await this.personalRepository.save(list); + }) + ); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Post("command10/officer/report/excecute") @@ -1395,18 +1498,25 @@ export class ReportController extends Controller { }[]; } ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds.map((x) => x.refId)) }, - }); - await Promise.all( - lists.map(async (list) => { - list.status = "DONE"; - list.commandNo = `${body?.refIds[0]?.commandNo || ""}/${body.refIds[0].commandYear + 543}`; - await this.appointRepository.save(list); - }) - ); - return new HttpSuccess(); + try { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds.map((x) => x.refId)) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "DONE"; + list.commandNo = `${body?.refIds[0]?.commandNo || ""}/${body.refIds[0].commandYear + 543}`; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command10/officer/report") public async command10( @Request() req: RequestWithUser, @@ -1415,17 +1525,24 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.status = "REPORT"; - await this.appointRepository.save(list); - }) - ); - return new HttpSuccess(); + try { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "REPORT"; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } + @Post("command10/officer/report/delete") public async command10Delete( @Request() req: RequestWithUser, @@ -1434,16 +1551,22 @@ export class ReportController extends Controller { refIds: string[]; } ) { - const lists = await this.appointRepository.find({ - where: { id: In(body.refIds) }, - }); - await Promise.all( - lists.map(async (list) => { - list.status = "PENDING"; - await this.appointRepository.save(list); - }) - ); - return new HttpSuccess(); + try { + const lists = await this.appointRepository.find({ + where: { id: In(body.refIds) }, + }); + await Promise.all( + lists.map(async (list) => { + list.status = "PENDING"; + await this.appointRepository.save(list); + }) + ); + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Get("command10/appoints/{refId}") @@ -1451,23 +1574,29 @@ export class ReportController extends Controller { @Request() req: RequestWithUser, @Path() refId: string ) { - const lists = await this.AppointDirectorRepository.find({ - where: { appointId: refId }, - order: { createdAt: "ASC" }, - }); - const directors = await Promise.all( - lists.map(async (director) => { - return { - profileId: director.profileId, - name: director.name, - position: director.position, - positionType: director.positionType, - positionLevel: director.positionLevel, - role: director.role === "chairman" ? "ประธาน" : "กรรมการ", - }; - }) - ); - return new HttpSuccess(directors); + try { + const lists = await this.AppointDirectorRepository.find({ + where: { appointId: refId }, + order: { createdAt: "ASC" }, + }); + const directors = await Promise.all( + lists.map(async (director) => { + return { + profileId: director.profileId, + name: director.name, + position: director.position, + positionType: director.positionType, + positionLevel: director.positionLevel, + role: director.role === "chairman" ? "ประธาน" : "กรรมการ", + }; + }) + ); + return new HttpSuccess(directors); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Get("report1") @@ -1490,271 +1619,324 @@ export class ReportController extends Controller { status7: number; }; } + try { + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; - const rootNode = await new CallAPI() - .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) - .catch((error) => { - console.error("Error calling API:", error); + let whereRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? { rootDna: rootNodeTrue.rootDnaId } + : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; + + let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); + let listsRootFalse = + rootDnaIds && rootDnaIds.length + ? await this.personalRepository.find({ + where: { + rootDna: In(rootDnaIds), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; + + let resultTrue: Result = {}; + let resultFalse: Result = {}; + + listsRootTrue.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultTrue[rootDnaId]) { + resultTrue[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultTrue[rootDnaId] as { [key: string]: any })[ + `status${status}` + ]++; + } }); - const rootNodeTrue = rootNode["isRootTrue"]; - const rootNodeFalse = rootNode["isRootFalse"]; + listsRootFalse.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; - let whereRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? { rootDna: rootNodeTrue.rootDnaId } - : {}; - let listsRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : undefined, - }, - }) - : []; + if (!resultFalse[rootDnaId]) { + resultFalse[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } - let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); - let listsRootFalse = - rootDnaIds && rootDnaIds.length - ? await this.personalRepository.find({ - where: { - rootDna: In(rootDnaIds), - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : undefined, - }, - }) - : []; - - let resultTrue: Result = {}; - let resultFalse: Result = {}; - - listsRootTrue.forEach((item) => { - let rootDnaId = item.rootDna; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultTrue[rootDnaId]) { - resultTrue[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - }; - } - - if (status >= 1 && status <= 7) { - (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; - } - }); - listsRootFalse.forEach((item) => { - let rootDnaId = item.rootDna; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultFalse[rootDnaId]) { - resultFalse[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - }; - } - - if (status >= 1 && status <= 7) { - (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; - } - }); - const resultTruePass = Object.values(resultTrue).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); - const resultTrueExtand = Object.values(resultTrue).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); - const resultTrueSuspension = "-"; - const resultTrueChangePos = Object.values(resultTrue).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); - const resultTrueResign = Object.values(resultTrue).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); - const resultTrueDeceased = Object.values(resultTrue).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); - const resultTrueNotPass = Object.values(resultTrue).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); - const resultFalsePass = Object.values(resultFalse).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); - const resultFalseExtand = Object.values(resultFalse).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); - const resultFalseSuspension = "-"; - const resultFalseChangePos = Object.values(resultFalse).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); - const resultFalseResign = Object.values(resultFalse).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); - const resultFalseDeceased = Object.values(resultFalse).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); - const resultFalseNotPass = Object.values(resultFalse).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); - const sumPass = - Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + - Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const sumExtand = - Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + - Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const sumSuspension = "-"; - const sumChangePos = - Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + - Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const sumResign = - Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + - Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const sumDeceased = - Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + - Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const sumNotPass = - Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + - Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumResultTrue = Object.values(resultTrue).reduce( - (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 + if (status >= 1 && status <= 7) { + (resultFalse[rootDnaId] as { [key: string]: any })[ + `status${status}` + ]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumPass = + Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 ); - }, - 0 - ); - const sumResultFalse = Object.values(resultFalse).reduce( - (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 + const sumExtand = + Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 ); - }, - 0 - ); - const sumAll = - sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; - const nowDate = Extension.ToThaiNumber( - Extension.ToThaiShortDate(new Date()) - ); - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - dateStart: startDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) - : "", - dateEnd: endDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) - : "", - resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultTrue[rootDnaId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - }), - resultTruePass: resultTruePass.toString(), - resultTrueExtand: resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos: resultTrueChangePos.toString(), - resultTrueResign: resultTrueResign.toString(), - resultTrueDeceased: resultTrueDeceased.toString(), - resultTrueNotPass: resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultFalse[rootDnaId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - }), - resultFalsePass: resultFalsePass.toString(), - resultFalseExtand: resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos: resultFalseChangePos.toString(), - resultFalseResign: resultFalseResign.toString(), - resultFalseDeceased: resultFalseDeceased.toString(), - resultFalseNotPass: resultFalseNotPass.toString(), - sumPass: sumPass.toString(), - sumExtand: sumExtand.toString(), - sumSuspension: "-", - sumChangePos: sumChangePos.toString(), - sumResign: sumResign.toString(), - sumDeceased: sumDeceased.toString(), - sumNotPass: sumNotPass.toString(), - sumResultTrue: sumResultTrue.toString(), - sumResultFalse: sumResultFalse.toString(), - sumAll: sumAll.toString(), - }; - return new HttpSuccess({ - template: "placementProbation01", - reportName: "xlsx-report", - data: formattedData, - }); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const sumResign = + Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const sumDeceased = + Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const sumNotPass = + Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumAll = + sumPass + + sumExtand + + sumChangePos + + sumResign + + sumDeceased + + sumNotPass; + const nowDate = Extension.ToThaiNumber( + Extension.ToThaiShortDate(new Date()) + ); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + dateStart: startDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) + : "", + dateEnd: endDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) + : "", + resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultTrue[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map( + (rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultFalse[rootDnaId]; + const sum = + status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + } + ), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; + return new HttpSuccess({ + template: "placementProbation01", + reportName: "xlsx-report", + data: formattedData, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Get("report2") @@ -1765,256 +1947,263 @@ export class ReportController extends Controller { @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date ) { - let personal = null; - let result: Array = []; - switch (node) { - case 0: { - personal = await this.personalRepository.find({ - where: { - rootDna: nodeId, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : Not(IsNull()), - }, - }); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - break; - } - case 1: { - personal = await this.personalRepository.find({ - where: { - child1Dna: nodeId, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : Not(IsNull()), - }, - }); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - break; - } - case 2: { - personal = await this.personalRepository.find({ - where: { - child2Dna: nodeId, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : Not(IsNull()), - }, - }); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - break; - } - case 3: { - personal = await this.personalRepository.find({ - where: { - child3Dna: nodeId, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : Not(IsNull()), - }, - }); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - break; - } - case 4: { - personal = await this.personalRepository.find({ - where: { - child4Dna: nodeId, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : Not(IsNull()), - }, - }); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - break; - } - default: { - personal = await this.personalRepository.find({}); - personal = await Promise.all( - personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id }, - }); - const no = idx + 1; - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns, - }; - }) - ); - } - } - - result = await Promise.all( - personal.flatMap((x) => - (x.assigns.length > 0 - ? x.assigns - : [{ id: null, date_start: null, date_finish: null }] - ).map(async (assign) => { - let accExam: string = ""; - let dateAppoint: Date | any = null; - await new CallAPI() - .GetData(req, `/placement/exam-probation/${x.idcard}`) - .then(async (x) => { - accExam = x.examName; - dateAppoint = x.dateAppoint; + try { + let personal = null; + let result: Array = []; + switch (node) { + case 0: { + personal = await this.personalRepository.find({ + where: { + rootDna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; }) - .catch((errr) => {}); - - const evaluateComman = await this.evaluateCommanderRepository.findOne( - { - where: { assign_id: assign.id ?? "" }, - } ); + break; + } + case 1: { + personal = await this.personalRepository.find({ + where: { + child1Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 2: { + personal = await this.personalRepository.find({ + where: { + child2Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 3: { + personal = await this.personalRepository.find({ + where: { + child3Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + case 4: { + personal = await this.personalRepository.find({ + where: { + child4Dna: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), + }, + }); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + break; + } + default: { + personal = await this.personalRepository.find({}); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }) + ); + } + } - return { - no: Extension.ToThaiNumber(x.no.toString()), - accExam: accExam, - fullName: x.fullName, - positionName: x.positionName, - organization: x.organization, - dateAppoint: dateAppoint - ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) - : "", - dateStart: - x.assigns.length > 0 && assign.date_start != null - ? Extension.ToThaiNumber( - Extension.ToThaiFullDate2(assign.date_start) - ) - : "", - dateFinish: - x.assigns.length > 0 && assign.date_finish != null - ? Extension.ToThaiNumber( - Extension.ToThaiFullDate2(assign.date_finish) - ) - : "", - day: - x.assigns.length > 0 && - assign.date_start != null && - assign.date_finish != null - ? Extension.ToThaiNumber( - `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน` - ) - : "", - status: x.probation_status - ? Extension.probationStatus(x.probation_status) - : "", - orientation: - evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", - learning: - evaluateComman && evaluateComman?.self_learning == 1 ? "☑" : "☐", - seminar: - evaluateComman && evaluateComman?.training_seminar == 1 - ? "☑" - : "☐", - other: - evaluateComman && evaluateComman?.other_training == 1 - ? "☑" - : "☐", - }; - }) - ) - ); + result = await Promise.all( + personal.flatMap((x) => + (x.assigns.length > 0 + ? x.assigns + : [{ id: null, date_start: null, date_finish: null }] + ).map(async (assign) => { + let accExam: string = ""; + let dateAppoint: Date | any = null; + await new CallAPI() + .GetData(req, `/placement/exam-probation/${x.idcard}`) + .then(async (x) => { + accExam = x.examName; + dateAppoint = x.dateAppoint; + }) + .catch((errr) => {}); - return new HttpSuccess({ - template: "placementProbation02", - reportName: "xlsx-report", - data: { - date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date()))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date()))}`, - dateCurrent: `ณ ${Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date()))}`, - data: result, - }, - }); + const evaluateComman = + await this.evaluateCommanderRepository.findOne({ + where: { assign_id: assign.id ?? "" }, + }); + + return { + no: Extension.ToThaiNumber(x.no.toString()), + accExam: accExam, + fullName: x.fullName, + positionName: x.positionName, + organization: x.organization, + dateAppoint: dateAppoint + ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) + : "", + dateStart: + x.assigns.length > 0 && assign.date_start != null + ? Extension.ToThaiNumber( + Extension.ToThaiFullDate2(assign.date_start) + ) + : "", + dateFinish: + x.assigns.length > 0 && assign.date_finish != null + ? Extension.ToThaiNumber( + Extension.ToThaiFullDate2(assign.date_finish) + ) + : "", + day: + x.assigns.length > 0 && + assign.date_start != null && + assign.date_finish != null + ? Extension.ToThaiNumber( + `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน` + ) + : "", + status: x.probation_status + ? Extension.probationStatus(x.probation_status) + : "", + orientation: + evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", + learning: + evaluateComman && evaluateComman?.self_learning == 1 + ? "☑" + : "☐", + seminar: + evaluateComman && evaluateComman?.training_seminar == 1 + ? "☑" + : "☐", + other: + evaluateComman && evaluateComman?.other_training == 1 + ? "☑" + : "☐", + }; + }) + ) + ); + + return new HttpSuccess({ + template: "placementProbation02", + reportName: "xlsx-report", + data: { + date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date()))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date()))}`, + dateCurrent: `ณ ${Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date()))}`, + data: result, + }, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } @Get("report3") @@ -2038,270 +2227,324 @@ export class ReportController extends Controller { }; } - const rootNode = await new CallAPI() - .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) - .catch((error) => { - console.error("Error calling API:", error); + try { + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; + + let whereRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? { rootDna: rootNodeTrue.rootDnaId } + : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootDnaId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; + + let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); + let listsRootFalse = + rootDnaIds && rootDnaIds.length + ? await this.personalRepository.find({ + where: { + rootDna: In(rootDnaIds), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : undefined, + }, + }) + : []; + + let resultTrue: Result = {}; + let resultFalse: Result = {}; + + listsRootTrue.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultTrue[rootDnaId]) { + resultTrue[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultTrue[rootDnaId] as { [key: string]: any })[ + `status${status}` + ]++; + } }); - const rootNodeTrue = rootNode["isRootTrue"]; - const rootNodeFalse = rootNode["isRootFalse"]; + listsRootFalse.forEach((item) => { + let rootDnaId = item.rootDna; + let status = item.probation_status; + let rootName = item.orgRootName; - let whereRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? { rootDna: rootNodeTrue.rootDnaId } - : {}; - let listsRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : undefined, - }, - }) - : []; + if (!resultFalse[rootDnaId]) { + resultFalse[rootDnaId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } - let rootDnaIds = rootNodeFalse.map((node: any) => node.rootDnaId); - let listsRootFalse = - rootDnaIds && rootDnaIds.length - ? await this.personalRepository.find({ - where: { - rootDna: In(rootDnaIds), - createdAt: - startDate && endDate - ? Between(new Date(startDate), new Date(endDate)) - : undefined, - }, - }) - : []; - - let resultTrue: Result = {}; - let resultFalse: Result = {}; - - listsRootTrue.forEach((item) => { - let rootDnaId = item.rootDna; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultTrue[rootDnaId]) { - resultTrue[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - }; - } - - if (status >= 1 && status <= 7) { - (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; - } - }); - listsRootFalse.forEach((item) => { - let rootDnaId = item.rootDna; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultFalse[rootDnaId]) { - resultFalse[rootDnaId] = { - rootName: rootName, - status1: 0, - status2: 0, - status3: 0, - status4: 0, - status5: 0, - status6: 0, - status7: 0, - }; - } - - if (status >= 1 && status <= 7) { - (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; - } - }); - const resultTruePass = Object.values(resultTrue).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); - const resultTrueExtand = Object.values(resultTrue).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); - const resultTrueSuspension = "-"; - const resultTrueChangePos = Object.values(resultTrue).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); - const resultTrueResign = Object.values(resultTrue).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); - const resultTrueDeceased = Object.values(resultTrue).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); - const resultTrueNotPass = Object.values(resultTrue).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); - const resultFalsePass = Object.values(resultFalse).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); - const resultFalseExtand = Object.values(resultFalse).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); - const resultFalseSuspension = "-"; - const resultFalseChangePos = Object.values(resultFalse).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); - const resultFalseResign = Object.values(resultFalse).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); - const resultFalseDeceased = Object.values(resultFalse).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); - const resultFalseNotPass = Object.values(resultFalse).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); - const sumPass = - Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + - Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const sumExtand = - Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + - Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const sumSuspension = "-"; - const sumChangePos = - Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + - Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const sumResign = - Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + - Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const sumDeceased = - Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + - Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const sumNotPass = - Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + - Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumResultTrue = Object.values(resultTrue).reduce( - (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 + if (status >= 1 && status <= 7) { + (resultFalse[rootDnaId] as { [key: string]: any })[ + `status${status}` + ]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumPass = + Object.values(resultTrue).reduce( + (sum, { status2 }) => sum + status2, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0 ); - }, - 0 - ); - const sumResultFalse = Object.values(resultFalse).reduce( - (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 + const sumExtand = + Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0 ); - }, - 0 - ); - const sumAll = - sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; - const nowDate = Extension.ToThaiNumber( - Extension.ToThaiShortDate(new Date()) - ); - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - accExam: "", - dateStart: startDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) - : "", - dateEnd: endDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) - : "", - resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultTrue[rootDnaId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - }), - resultTruePass: resultTruePass.toString(), - resultTrueExtand: resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos: resultTrueChangePos.toString(), - resultTrueResign: resultTrueResign.toString(), - resultTrueDeceased: resultTrueDeceased.toString(), - resultTrueNotPass: resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultFalse[rootDnaId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - }), - resultFalsePass: resultFalsePass.toString(), - resultFalseExtand: resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos: resultFalseChangePos.toString(), - resultFalseResign: resultFalseResign.toString(), - resultFalseDeceased: resultFalseDeceased.toString(), - resultFalseNotPass: resultFalseNotPass.toString(), - sumPass: sumPass.toString(), - sumExtand: sumExtand.toString(), - sumSuspension: "-", - sumChangePos: sumChangePos.toString(), - sumResign: sumResign.toString(), - sumDeceased: sumDeceased.toString(), - sumNotPass: sumNotPass.toString(), - sumResultTrue: sumResultTrue.toString(), - sumResultFalse: sumResultFalse.toString(), - sumAll: sumAll.toString(), - }; - return new HttpSuccess({ - template: "placementProbation03", - reportName: "xlsx-report", - data: formattedData, - }); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0 + ); + const sumResign = + Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0 + ); + const sumDeceased = + Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0 + ); + const sumNotPass = + Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0 + ) + + Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0 + ); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return ( + total + status2 + status7 + status4 + status5 + status6 + status3 + ); + }, + 0 + ); + const sumAll = + sumPass + + sumExtand + + sumChangePos + + sumResign + + sumDeceased + + sumNotPass; + const nowDate = Extension.ToThaiNumber( + Extension.ToThaiShortDate(new Date()) + ); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + accExam: "", + dateStart: startDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) + : "", + dateEnd: endDate + ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) + : "", + resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultTrue[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map( + (rootDnaId, index) => { + const { + status2, + status7, + status4, + status5, + status6, + status3, + rootName, + } = resultFalse[rootDnaId]; + const sum = + status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + } + ), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; + return new HttpSuccess({ + template: "placementProbation03", + reportName: "xlsx-report", + data: formattedData, + }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } } } diff --git a/src/controllers/SurveyController.ts b/src/controllers/SurveyController.ts index 1e2ec98..58f458b 100644 --- a/src/controllers/SurveyController.ts +++ b/src/controllers/SurveyController.ts @@ -1,132 +1,190 @@ -import { Controller, Route, Security, Tags, Request, SuccessResponse, Response, Get, Post, Body, Query } from "tsoa" -import HttpSuccess from "../interfaces/http-success" -import HttpStatusCode from "../interfaces/http-status" -import HttpError from "../interfaces/http-error" -import { RequestWithUser } from "../middlewares/user" -import { setLogDataDiff } from "../interfaces/utils" -import { Survey } from "../entities/Survey" -import { Assign } from "../entities/Assign" -import { AppDataSource } from "../database/data-source" -import CallAPI from "../interfaces/call-api" -import permission from "../interfaces/permission" -import { Brackets } from "typeorm" +import { + Controller, + Route, + Security, + Tags, + Request, + SuccessResponse, + Response, + Get, + Post, + Body, + Query, +} from "tsoa"; +import HttpSuccess from "../interfaces/http-success"; +import HttpStatusCode from "../interfaces/http-status"; +import HttpError from "../interfaces/http-error"; +import { RequestWithUser } from "../middlewares/user"; +import { setLogDataDiff } from "../interfaces/utils"; +import { Survey } from "../entities/Survey"; +import { Assign } from "../entities/Assign"; +import { AppDataSource } from "../database/data-source"; +import CallAPI from "../interfaces/call-api"; +import permission from "../interfaces/permission"; +import { Brackets } from "typeorm"; @Route("api/v1/probation/survey") @Tags("Survey") @Security("bearerAuth") -@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง") +@Response( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" +) export class SurveyController extends Controller { - private surveyRepository = AppDataSource.getRepository(Survey) - private assignRepository = AppDataSource.getRepository(Assign) + private surveyRepository = AppDataSource.getRepository(Survey); + private assignRepository = AppDataSource.getRepository(Assign); - /** - * API แบบสำรวจความคิดเห็น - * - * @summary แบบสำรวจความคิดเห็น - * - */ - @Get("") - async GetSurvey(@Request() request: RequestWithUser) { - const personalId = await new CallAPI().GetData(request, "/org/profile/keycloak").catch(error => { - console.error("Error calling API:", error) - }) + /** + * API แบบสำรวจความคิดเห็น + * + * @summary แบบสำรวจความคิดเห็น + * + */ + @Get("") + async GetSurvey(@Request() request: RequestWithUser) { + try { + const personalId = await new CallAPI().GetData( + request, + "/org/profile/keycloak" + ); - const dataAssign = await this.assignRepository.findOne({ - select: ["id"], - where: { personal_id: personalId }, - order: { date_start: "DESC" }, - }) - if (!dataAssign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบผลการประเมินการทดลองปฏิบัติหน้าที่ราชการนี้") - } - const assign_id = dataAssign.id + const dataAssign = await this.assignRepository.findOne({ + select: ["id"], + where: { personal_id: personalId }, + order: { date_start: "DESC" }, + }); + if (!dataAssign) { + throw new HttpError( + HttpStatusCode.NOT_FOUND, + "ไม่พบผลการประเมินการทดลองปฏิบัติหน้าที่ราชการนี้" + ); + } + const assign_id = dataAssign.id; - const data = await this.surveyRepository.findOne({ - where: { - assign_id, - }, - }) - return new HttpSuccess({ data: data, assignId: assign_id }) - } + const data = await this.surveyRepository.findOne({ + where: { + assign_id, + }, + }); + return new HttpSuccess({ data: data, assignId: assign_id }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API บันทึกแบบสำรวจความคิดเห็น - * - * @summary บันทึกแบบสำรวจความคิดเห็น - * - */ - @Post("") - async PostSurvey(@Query() assign_id: string, @Body() requestBody: any, @Request() request: RequestWithUser) { - const personalId = await new CallAPI().GetData(request, "/org/profile/keycloak").catch(error => { - console.error("Error calling API:", error) - }) + /** + * API บันทึกแบบสำรวจความคิดเห็น + * + * @summary บันทึกแบบสำรวจความคิดเห็น + * + */ + @Post("") + async PostSurvey( + @Query() assign_id: string, + @Body() requestBody: any, + @Request() request: RequestWithUser + ) { + try { + const personalId = await new CallAPI().GetData( + request, + "/org/profile/keycloak" + ); - const before = null - const data = await { - ...requestBody, - personal_id: personalId, - assign_id, - createdUserId: request.user.sub, - updateUserId: request.user.sub, - } - await this.surveyRepository.save(data, { data: request }) - setLogDataDiff(request, { before, after: data }) + const before = null; + const data = await { + ...requestBody, + personal_id: personalId, + assign_id, + createdUserId: request.user.sub, + updateUserId: request.user.sub, + }; + await this.surveyRepository.save(data, { data: request }); + setLogDataDiff(request, { before, after: data }); - return new HttpSuccess() - } + return new HttpSuccess(); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + } - /** - * API รายการผลสำรวจความคิดเห็นของ Admin - * - * @summary ผลสำรวจความคิดเห็นของ Admin - * - */ - @Get("/admin") - async GetSurveyAdmin( - @Query() year: number = new Date().getFullYear(), - @Query() keyword: string = "", - @Query("page") page: number = 1, - @Query("pageSize") pageSize: number = 10, - @Request() request: RequestWithUser - ) { - // await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const start = new Date("01-01-" + year) - const end = new Date("12-31-" + year) + /** + * API รายการผลสำรวจความคิดเห็นของ Admin + * + * @summary ผลสำรวจความคิดเห็นของ Admin + * + */ + @Get("/admin") + async GetSurveyAdmin( + @Query() year: number = new Date().getFullYear(), + @Query() keyword: string = "", + @Query("page") page: number = 1, + @Query("pageSize") pageSize: number = 10, + @Request() request: RequestWithUser + ) { + try { + const start = new Date("01-01-" + year); + const end = new Date("12-31-" + year); - const searchKeyword = await (keyword ? keyword.trim() : null) + const searchKeyword = await (keyword ? keyword.trim() : null); - const [lists, total] = await AppDataSource.getRepository(Survey) - .createQueryBuilder("survey") - .leftJoinAndSelect("survey.personal", "personal") - .where(`survey.createdAt BETWEEN '${start.toISOString()}' AND '${end.toISOString()}'`) - .andWhere( - new Brackets(qb => { - qb.orWhere(searchKeyword ? `CONCAT(personal.prefixName, personal.firstName," ",personal.lastName) like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - qb.orWhere(searchKeyword ? `CONCAT(personal.positionName, personal.positionLevelName) like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }) - }) - ) - .orderBy("survey.createdAt", "DESC") - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount() + const [lists, total] = await AppDataSource.getRepository(Survey) + .createQueryBuilder("survey") + .leftJoinAndSelect("survey.personal", "personal") + .where( + `survey.createdAt BETWEEN '${start.toISOString()}' AND '${end.toISOString()}'` + ) + .andWhere( + new Brackets((qb) => { + qb.orWhere( + searchKeyword + ? `CONCAT(personal.prefixName, personal.firstName," ",personal.lastName) like '%${keyword}%'` + : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword + ? `CONCAT(personal.positionName, personal.positionLevelName) like '%${keyword}%'` + : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + }) + ) + .orderBy("survey.createdAt", "DESC") + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); - const data = lists.map(item => { - return { - createdAt: item.createdAt, - personal_id: item.personal_id, - assign_id: item.assign_id, - answer1: item.answer1, - answer2: item.answer2, - answer3: item.answer3, - fullname: item.personal ? `${item.personal.prefixName}${item.personal.firstName} ${item.personal.lastName}` : "", - position: item.personal ? `${item.personal.positionName}${item.personal.positionLevelName}` : "", - } - }) + const data = lists.map((item) => { + return { + createdAt: item.createdAt, + personal_id: item.personal_id, + assign_id: item.assign_id, + answer1: item.answer1, + answer2: item.answer2, + answer3: item.answer3, + fullname: item.personal + ? `${item.personal.prefixName}${item.personal.firstName} ${item.personal.lastName}` + : "", + position: item.personal + ? `${item.personal.positionName}${item.personal.positionLevelName}` + : "", + }; + }); - return new HttpSuccess({ data, total: total }) - } + return new HttpSuccess({ data, total: total }); + } catch (error: any) { + if (error instanceof HttpError) { + throw error; + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } + // await new permission().PermissionUpdate(request, "SYS_PROBATION"); + } } From 611a51a3bdce20a6da1f657241a000d2cd9a109c Mon Sep 17 00:00:00 2001 From: moss <> Date: Tue, 1 Apr 2025 00:38:55 +0700 Subject: [PATCH 11/18] check type object log --- src/interfaces/utils.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/interfaces/utils.ts b/src/interfaces/utils.ts index d5fde6c..e791c9f 100644 --- a/src/interfaces/utils.ts +++ b/src/interfaces/utils.ts @@ -19,10 +19,20 @@ export type LogSequence = { }; export function setLogDataDiff(req: RequestWithUser, data: DataDiff) { - req.app.locals.logData.dataDiff = { - before: JSON.stringify(data.before), - after: JSON.stringify(data.after), - }; + // Check if data.before and data.after are valid objects + if ( + data.before && + typeof data.before === "object" && + data.after && + typeof data.after === "object" + ) { + req.app.locals.logData.dataDiff = { + before: JSON.stringify(data.before), + after: JSON.stringify(data.after), + }; + } else { + console.error("Invalid data provided: both before and after must be valid objects."); + } } export function addLogSequence(req: RequestWithUser, data: LogSequence) { From 5e827d4060cdd1a76a587c332ffde47488803ef2 Mon Sep 17 00:00:00 2001 From: moss <> Date: Thu, 3 Apr 2025 11:15:06 +0700 Subject: [PATCH 12/18] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=AA?= =?UTF-8?q?=E0=B8=96=E0=B9=88=E0=B8=99=E0=B8=B0=E0=B8=AD=E0=B8=AD=E0=B8=81?= =?UTF-8?q?=E0=B8=84=E0=B8=B3=E0=B8=AA=E0=B8=B1=E0=B9=88=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/ReportController.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index c436a4e..d291393 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -1304,6 +1304,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; + status: string; } ) { try { @@ -1425,6 +1426,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; + status: string; } ) { try { @@ -1523,6 +1525,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; + status: string; } ) { try { @@ -1531,7 +1534,7 @@ export class ReportController extends Controller { }); await Promise.all( lists.map(async (list) => { - list.status = "REPORT"; + list.status = body.status.trim().toUpperCase(); await this.appointRepository.save(list); }) ); From a38adb9598a892e4b4f93b8fa588d4bc3cbca9c2 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Tue, 22 Apr 2025 09:46:45 +0700 Subject: [PATCH 13/18] fixing \n field organization --- src/controllers/PersonalController.ts | 140 +++++++------------------- 1 file changed, 37 insertions(+), 103 deletions(-) diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 95518a0..898ff12 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -27,7 +27,7 @@ import { Brackets } from "typeorm"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) export class PersonalController extends Controller { private personalRepository = AppDataSource.getRepository(Personal); @@ -40,10 +40,7 @@ export class PersonalController extends Controller { * */ @Post("add") - async AddPersonal( - @Body() requestBody: PostPersonal, - @Request() request: RequestWithUser - ) { + async AddPersonal(@Body() requestBody: PostPersonal, @Request() request: RequestWithUser) { try { await new permission().PermissionCreate(request, "SYS_PROBATION"); @@ -53,31 +50,19 @@ export class PersonalController extends Controller { if (checkPersonal > 0) { 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 + "\n" : ""); + organization += await (requestBody.orgChild3Name ? requestBody.orgChild3Name + "\n" : ""); + organization += await (requestBody.orgChild2Name ? requestBody.orgChild2Name + "\n" : ""); + organization += await (requestBody.orgChild1Name ? requestBody.orgChild1Name + "\n" : ""); + 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; @@ -89,12 +74,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 : ""; @@ -139,57 +120,34 @@ export class PersonalController extends Controller { @Query() keyword: string = "", @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionList(request, "SYS_PROBATION"); - const _data = await new permission().PermissionOrgList( - request, - "SYS_PROBATION" - ); + const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION"); const conditions: any = {}; if (status) { conditions.probation_status = status; } - if ( - _data.root != undefined && - _data.root != null && - _data.root[0] != null - ) { + if (_data.root != undefined && _data.root != null && _data.root[0] != null) { conditions.root = _data.root; } - if ( - _data.child1 != undefined && - _data.child1 != null && - _data.child1[0] != null - ) { + if (_data.child1 != undefined && _data.child1 != null && _data.child1[0] != null) { conditions.child1 = _data.child1; } - if ( - _data.child2 != undefined && - _data.child2 != null && - _data.child2[0] != null - ) { + if (_data.child2 != undefined && _data.child2 != null && _data.child2[0] != null) { conditions.child2 = _data.child2; } - if ( - _data.child3 != undefined && - _data.child3 != null && - _data.child3[0] != null - ) { + if (_data.child3 != undefined && _data.child3 != null && _data.child3[0] != null) { conditions.child3 = _data.child3; } - if ( - _data.child4 != undefined && - _data.child4 != null && - _data.child4[0] != null - ) { + if (_data.child4 != undefined && _data.child4 != null && _data.child4[0] != null) { conditions.child4 = _data.child4; } @@ -206,33 +164,21 @@ export class PersonalController extends Controller { : "1=1", { keyword: `%${searchKeyword}%`, - } + }, ); - qb.orWhere( - searchKeyword ? `positionName like '%${keyword}%'` : "1=1", - { - keyword: `%${searchKeyword}%`, - } - ); - qb.orWhere( - searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", - { - keyword: `%${searchKeyword}%`, - } - ); - qb.orWhere( - searchKeyword ? `organization like '%${keyword}%'` : "1=1", - { - keyword: `%${searchKeyword}%`, - } - ); - qb.orWhere( - searchKeyword ? `order_number like '%${keyword}%'` : "1=1", - { - keyword: `%${searchKeyword}%`, - } - ); - }) + qb.orWhere(searchKeyword ? `positionName like '%${keyword}%'` : "1=1", { + keyword: `%${searchKeyword}%`, + }); + qb.orWhere(searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", { + keyword: `%${searchKeyword}%`, + }); + qb.orWhere(searchKeyword ? `organization like '%${keyword}%'` : "1=1", { + keyword: `%${searchKeyword}%`, + }); + qb.orWhere(searchKeyword ? `order_number like '%${keyword}%'` : "1=1", { + keyword: `%${searchKeyword}%`, + }); + }), ) .orderBy("updatedAt", "DESC") .skip((page - 1) * pageSize) @@ -240,10 +186,7 @@ export class PersonalController extends Controller { .getManyAndCount(); if (!lists) { - throw new HttpError( - HttpStatusCode.INTERNAL_SERVER_ERROR, - "ไม่สามารถแสดงข้อมูลได้" - ); + throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, "ไม่สามารถแสดงข้อมูลได้"); } let result: any = []; @@ -256,8 +199,7 @@ export class PersonalController extends Controller { await result.push({ personal_id: lists[i].personal_id, ordering: i + 1, - name: - lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, + name: lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, prefixName: lists[i].prefixName, firstName: lists[i].firstName, lastName: lists[i].lastName, @@ -313,18 +255,10 @@ export class PersonalController extends Controller { * */ @Get("") - async GetPersonal( - @Request() request: RequestWithUser, - @Query() personal_id: string - ) { + async GetPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { try { - let _workflow = await new permission().Workflow( - request, - personal_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ where: { personal_id: personal_id }, }); From 1a6dc0214e779eee86e4976b207897f228e43995 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 25 Apr 2025 09:15:26 +0700 Subject: [PATCH 14/18] fixing throw error message --- src/controllers/AppointController.ts | 66 +- src/controllers/AssignController.ts | 360 ++++----- .../AssignPermissionsController.ts | 10 +- src/controllers/CalculateController.ts | 6 +- src/controllers/DataOptionsController.ts | 54 +- src/controllers/EvaluateChairmanController.ts | 141 +--- src/controllers/EvaluateController.ts | 96 +-- src/controllers/EvaluateRecordController.ts | 337 +++----- src/controllers/EvaluateResultController.ts | 139 +--- src/controllers/PersonalController.ts | 6 +- src/controllers/ReportController.ts | 726 ++++++------------ src/controllers/SurveyController.ts | 6 +- 12 files changed, 622 insertions(+), 1325 deletions(-) diff --git a/src/controllers/AppointController.ts b/src/controllers/AppointController.ts index 6bb8256..f114f28 100644 --- a/src/controllers/AppointController.ts +++ b/src/controllers/AppointController.ts @@ -22,12 +22,7 @@ import HttpStatusCode from "../interfaces/http-status"; import HttpError from "../interfaces/http-error"; import permission from "../interfaces/permission"; import { RequestWithUser } from "../middlewares/user"; -import { - Appoint, - CreateAppoint, - Person, - UpdateAppoint, -} from "../entities/Appoint"; +import { Appoint, CreateAppoint, Person, UpdateAppoint } from "../entities/Appoint"; import { AppointDirector } from "../entities/AppointDirector"; import CallAPI from "../interfaces/call-api"; @@ -36,12 +31,11 @@ import CallAPI from "../interfaces/call-api"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) export class AppointController extends Controller { private appointRepository = AppDataSource.getRepository(Appoint); - private appointDirectorRepository = - AppDataSource.getRepository(AppointDirector); + private appointDirectorRepository = AppDataSource.getRepository(AppointDirector); /** * API รายการแต่งตั้งคณะกรรมการฯ ทดลองงาน @@ -54,7 +48,7 @@ export class AppointController extends Controller { @Query() keyword: string = "", @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { const appoint = await this.appointRepository.find({ @@ -67,7 +61,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } // await new permission().PermissionList(request, "SYS_PROBATION") // const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION") @@ -102,10 +96,7 @@ export class AppointController extends Controller { * */ @Get("list/{id}") - async GetListCommand( - @Request() request: RequestWithUser, - @Path() id: string - ) { + async GetListCommand(@Request() request: RequestWithUser, @Path() id: string) { try { const appoint = await this.appointRepository.find({ relations: ["directors"], @@ -116,7 +107,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -127,10 +118,7 @@ export class AppointController extends Controller { * */ @Post("") - async Create( - @Request() request: RequestWithUser, - @Body() requestBody: CreateAppoint - ) { + async Create(@Request() request: RequestWithUser, @Body() requestBody: CreateAppoint) { try { await new permission().PermissionCreate(request, "SYS_PROBATION"); @@ -150,7 +138,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -163,13 +151,8 @@ export class AppointController extends Controller { @Get("{id}") async GetById(@Request() request: RequestWithUser, @Path() id: string) { try { - let _workflow = await new permission().Workflow( - request, - id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const appoint = await this.appointRepository.findOne({ select: ["id", "topic", "status", "profileId"], @@ -181,7 +164,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -195,7 +178,7 @@ export class AppointController extends Controller { async Update( @Request() request: RequestWithUser, @Body() requestBody: UpdateAppoint, - @Path() id: string + @Path() id: string, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -205,10 +188,7 @@ export class AppointController extends Controller { }); if (!appoint) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลการแต่งตั้งคณะกรรมการฯ" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการแต่งตั้งคณะกรรมการฯ"); } const before = appoint; @@ -234,7 +214,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -245,10 +225,7 @@ export class AppointController extends Controller { * */ @Delete("{id}") - public async deleteRole( - @Path() id: string, - @Request() request: RequestWithUser - ) { + public async deleteRole(@Path() id: string, @Request() request: RequestWithUser) { try { await new permission().PermissionDelete(request, "SYS_PROBATION"); @@ -261,7 +238,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -272,10 +249,7 @@ export class AppointController extends Controller { * */ @Get("/committee/{profileId}") - async GetCheckById( - @Request() request: RequestWithUser, - @Path() profileId: string - ) { + async GetCheckById(@Request() request: RequestWithUser, @Path() profileId: string) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -293,7 +267,7 @@ export class AppointController extends Controller { { directorId, profileId, - } + }, ) .orderBy("appoint.createdAt", "DESC") .getOne(); @@ -302,7 +276,7 @@ export class AppointController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index d2d9e26..dfd6062 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, @@ -49,23 +40,18 @@ import CallAPI from "../interfaces/call-api"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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); @@ -87,10 +73,7 @@ export class AssignController extends Controller { * */ @Post("") - async AddAssign( - @Request() request: RequestWithUser, - @Body() requestBody: CreateAssign - ) { + async AddAssign(@Request() request: RequestWithUser, @Body() requestBody: CreateAssign) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ @@ -126,17 +109,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 }); @@ -149,36 +130,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 }); @@ -193,7 +170,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, @@ -211,7 +188,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, @@ -227,7 +204,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 }); @@ -242,7 +219,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 }); @@ -251,7 +228,7 @@ export class AssignController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -265,7 +242,7 @@ export class AssignController extends Controller { async EditAssign( @Query() assign_id: string, @Request() request: RequestWithUser, - @Body() requestBody: CreateAssign + @Body() requestBody: CreateAssign, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -276,10 +253,7 @@ export class AssignController extends Controller { let before = assign; if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const person = await this.personalRepository.findOne({ @@ -303,17 +277,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 }); @@ -326,36 +298,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 }); @@ -370,7 +338,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyRepository.save(competencise); @@ -386,7 +354,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignCompetencyGroupRepository.save(competencyGroups); @@ -400,7 +368,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignOutputRepository.save(outputs); @@ -415,7 +383,7 @@ export class AssignController extends Controller { createdFullName: request.user.name, updateUserId: request.user.sub, updateFullName: request.user.name, - }) + }), ); await this.assignDirectorRepository.save(directors); @@ -488,7 +456,7 @@ export class AssignController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -499,18 +467,10 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - personal_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const lists = await this.assignRepository.find({ select: ["id", "round_no", "date_start", "date_finish"], where: { personal_id }, @@ -538,14 +498,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({ @@ -554,14 +510,14 @@ export class AssignController extends Controller { commander: commander, chairman: chairman, }); - }) + }), ); return new HttpSuccess(result); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -572,10 +528,7 @@ export class AssignController extends Controller { * */ @Get("assign-user-list") - async ListPersonalUser( - @Request() request: RequestWithUser, - @Query() personal_id: string - ) { + async ListPersonalUser(@Request() request: RequestWithUser, @Query() personal_id: string) { try { const lists = await this.assignRepository.find({ select: ["id", "round_no", "date_start", "date_finish"], @@ -604,14 +557,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({ @@ -620,14 +569,14 @@ export class AssignController extends Controller { commander: commander, chairman: chairman, }); - }) + }), ); return new HttpSuccess(result); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -641,16 +590,11 @@ export class AssignController extends Controller { async GetAssign( @Query() assign_id: string, @Query() isReport: boolean = false, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const assign = await this.assignRepository.findOne({ select: [ @@ -673,10 +617,7 @@ export class AssignController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -707,11 +648,9 @@ export class AssignController extends Controller { name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, Position: profileData.positionName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: profileData.orgRootName, - PositionAndLevel: - profileData.positionName + profileData.positionLevelName, + PositionAndLevel: profileData.positionName + profileData.positionLevelName, }; const jobs = await this.assignJobRepository.find({ @@ -764,7 +703,7 @@ export class AssignController extends Controller { description: description, status_select: x.status_select, }; - }) + }), ); const skillsData = await this.assignSkillRepository.find({ @@ -791,12 +730,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 }, order: { createdAt: "ASC" }, }); @@ -808,17 +742,16 @@ 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 }, - order: { createdAt: "ASC" }, - }); + const competencyGroupData = await this.assignCompetencyGroupRepository.find({ + select: [ + "competency_group_id", + "competency_group_level", + "competency_group_name", + "competency_group_description", + ], + where: { assign_id }, + order: { createdAt: "ASC" }, + }); const competency_groups = await competencyGroupData.map((x) => ({ id: x.competency_group_id, level: x.competency_group_level, @@ -844,18 +777,13 @@ export class AssignController extends Controller { mentors.push({ ...e, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), Position: e.position + e.posLevel, // 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, @@ -870,8 +798,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, @@ -879,9 +806,7 @@ export class AssignController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), Position: chairmanData.position + chairmanData.posLevel, // report } : null); @@ -903,7 +828,7 @@ export class AssignController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -917,7 +842,7 @@ export class AssignController extends Controller { async GetAssignUser( @Query() assign_id: string, @Query() isReport: boolean = false, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { const assign = await this.assignRepository.findOne({ @@ -941,10 +866,7 @@ export class AssignController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -975,11 +897,9 @@ export class AssignController extends Controller { name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, Position: profileData.positionName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: profileData.orgRootName, - PositionAndLevel: - profileData.positionName + profileData.positionLevelName, + PositionAndLevel: profileData.positionName + profileData.positionLevelName, }; const jobs = await this.assignJobRepository.find({ @@ -1032,7 +952,7 @@ export class AssignController extends Controller { description: description, status_select: x.status_select, }; - }) + }), ); const skillsData = await this.assignSkillRepository.find({ @@ -1059,12 +979,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 }, order: { createdAt: "ASC" }, }); @@ -1076,17 +991,16 @@ 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 }, - order: { createdAt: "ASC" }, - }); + const competencyGroupData = await this.assignCompetencyGroupRepository.find({ + select: [ + "competency_group_id", + "competency_group_level", + "competency_group_name", + "competency_group_description", + ], + where: { assign_id }, + order: { createdAt: "ASC" }, + }); const competency_groups = await competencyGroupData.map((x) => ({ id: x.competency_group_id, level: x.competency_group_level, @@ -1112,18 +1026,13 @@ export class AssignController extends Controller { mentors.push({ ...e, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), Position: e.position + e.posLevel, // 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, @@ -1138,8 +1047,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, @@ -1147,9 +1055,7 @@ export class AssignController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), Position: chairmanData.position + chairmanData.posLevel, // report } : null); @@ -1171,7 +1077,7 @@ export class AssignController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/AssignPermissionsController.ts b/src/controllers/AssignPermissionsController.ts index ef848ef..4953ea5 100644 --- a/src/controllers/AssignPermissionsController.ts +++ b/src/controllers/AssignPermissionsController.ts @@ -17,10 +17,7 @@ export class AssignPermissionsController extends Controller { private assignRepository = AppDataSource.getRepository(Assign); @Get("{id}") - async GetAssignPermissions( - @Request() request: RequestWithUser, - @Path() id: string - ) { + async GetAssignPermissions(@Request() request: RequestWithUser, @Path() id: string) { try { const director = await this.assignDirector.find({ where: { assign_id: id }, @@ -32,8 +29,7 @@ export class AssignPermissionsController extends Controller { console.error("Error calling API:", error); }); - const role = await director.find((e: any) => e.personal_id === personalId) - ?.role; + const role = await director.find((e: any) => e.personal_id === personalId)?.role; const reportPersonId = await this.assignRepository.findOneBy({ id, @@ -75,7 +71,7 @@ export class AssignPermissionsController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/CalculateController.ts b/src/controllers/CalculateController.ts index 2edf5d2..357b38a 100644 --- a/src/controllers/CalculateController.ts +++ b/src/controllers/CalculateController.ts @@ -21,7 +21,7 @@ import { findEndDate } from "../interfaces/utils"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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, ) { try { const { month, start_date } = requestBody; @@ -47,7 +47,7 @@ export class CalculateController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/DataOptionsController.ts b/src/controllers/DataOptionsController.ts index 44b9ff1..0646c7a 100644 --- a/src/controllers/DataOptionsController.ts +++ b/src/controllers/DataOptionsController.ts @@ -27,13 +27,12 @@ import permission from "../interfaces/permission"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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); @@ -74,10 +73,7 @@ export class DataOptionController extends Controller { } if (!result) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง"); } const knowledges = await this.knowledgeRepository.find({ @@ -103,7 +99,7 @@ export class DataOptionController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -155,10 +151,7 @@ export class DataOptionController extends Controller { } if (!result) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง"); } const computerData = await this.skillRepository.findOne({ @@ -166,10 +159,7 @@ export class DataOptionController extends Controller { }); if (!computerData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลทักษะคอมพิวเตอร์" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะคอมพิวเตอร์"); } const computer = await { id: computerData.id, @@ -192,10 +182,7 @@ export class DataOptionController extends Controller { }); if (!englishData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลทักษะภาษาอังกฤษ" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะภาษาอังกฤษ"); } const english = await { @@ -270,7 +257,7 @@ export class DataOptionController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -303,7 +290,7 @@ export class DataOptionController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -314,18 +301,10 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - personal_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ select: [ @@ -369,7 +348,7 @@ export class DataOptionController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } /** @@ -379,10 +358,7 @@ export class DataOptionController extends Controller { * */ @Get("new-assign-user") - async NewAssignUser( - @Query() personal_id: string, - @Request() request: RequestWithUser - ) { + async NewAssignUser(@Query() personal_id: string, @Request() request: RequestWithUser) { try { const person = await this.personalRepository.findOne({ select: [ @@ -426,7 +402,7 @@ export class DataOptionController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/EvaluateChairmanController.ts b/src/controllers/EvaluateChairmanController.ts index 2e2a208..6f642a1 100644 --- a/src/controllers/EvaluateChairmanController.ts +++ b/src/controllers/EvaluateChairmanController.ts @@ -22,24 +22,19 @@ 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"; +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, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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); /** @@ -49,18 +44,10 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], @@ -79,10 +66,7 @@ export class EvaluateChairmanController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -90,10 +74,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); @@ -116,10 +97,7 @@ export class EvaluateChairmanController extends Controller { }); if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } let mentors = []; @@ -132,10 +110,7 @@ export class EvaluateChairmanController extends Controller { personal_id: e.personal_id, dated: e.dated, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), position: e.position, posType: e.posType, posLevel: e.posLevel, @@ -143,9 +118,7 @@ export class EvaluateChairmanController extends Controller { } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); const commander = commanderData != null @@ -165,9 +138,7 @@ export class EvaluateChairmanController extends Controller { } : null; - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData != null ? { @@ -177,9 +148,7 @@ export class EvaluateChairmanController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), position: chairmanData.position, posType: chairmanData.posType, posLevel: chairmanData.posLevel, @@ -199,7 +168,7 @@ export class EvaluateChairmanController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -213,7 +182,7 @@ export class EvaluateChairmanController extends Controller { async GetEvaluate( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -261,10 +230,7 @@ export class EvaluateChairmanController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -292,10 +258,7 @@ export class EvaluateChairmanController extends Controller { }); if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } let mentors = []; @@ -308,10 +271,7 @@ export class EvaluateChairmanController extends Controller { personal_id: e.personal_id, dated: e.dated, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), position: e.position, posType: e.posType, posLevel: e.posLevel, @@ -319,9 +279,7 @@ export class EvaluateChairmanController extends Controller { } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); const commander = commanderData != null @@ -341,9 +299,7 @@ export class EvaluateChairmanController extends Controller { } : null; - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData != null ? { @@ -353,9 +309,7 @@ export class EvaluateChairmanController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), position: chairmanData.position, posType: chairmanData.posType, posLevel: chairmanData.posLevel, @@ -373,7 +327,7 @@ export class EvaluateChairmanController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -387,7 +341,7 @@ export class EvaluateChairmanController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateChairman, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -410,10 +364,7 @@ export class EvaluateChairmanController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -432,9 +383,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, @@ -471,7 +420,7 @@ export class EvaluateChairmanController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -486,7 +435,7 @@ export class EvaluateChairmanController extends Controller { // @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateChairman, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -511,9 +460,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; @@ -529,25 +476,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; - 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; + 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_result = requestBody.develop_result; evaluate.achievement_score = requestBody.achievement_score; evaluate.achievement_score_total = requestBody.achievement_score_total; @@ -571,7 +508,7 @@ export class EvaluateChairmanController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/EvaluateController.ts b/src/controllers/EvaluateController.ts index 63fba47..23a9530 100644 --- a/src/controllers/EvaluateController.ts +++ b/src/controllers/EvaluateController.ts @@ -20,10 +20,7 @@ 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"; import permission from "../interfaces/permission"; @@ -32,14 +29,12 @@ import permission from "../interfaces/permission"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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); /** @@ -49,18 +44,10 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const director = await this.assignDirectorRepository.findOne({ select: ["personal_id"], @@ -79,10 +66,7 @@ export class EvaluateController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -90,10 +74,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); @@ -111,21 +92,11 @@ export class EvaluateController extends Controller { : findEndDate(evaluate_amount * 3, assign.date_start); const 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) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้บังคับบัญชา" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา"); } const commander = await { ...commanderData, @@ -144,7 +115,7 @@ export class EvaluateController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -158,7 +129,7 @@ export class EvaluateController extends Controller { async GetEvaluate( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -207,10 +178,7 @@ export class EvaluateController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } // const profile = await (assign.profile @@ -239,14 +207,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 }, }); @@ -284,7 +245,7 @@ export class EvaluateController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -298,7 +259,7 @@ export class EvaluateController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateCommander, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -321,10 +282,7 @@ export class EvaluateController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -343,9 +301,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, @@ -382,7 +338,7 @@ export class EvaluateController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -397,7 +353,7 @@ export class EvaluateController extends Controller { // @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateCommander, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -423,9 +379,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; @@ -441,9 +395,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; @@ -460,7 +412,7 @@ export class EvaluateController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/EvaluateRecordController.ts b/src/controllers/EvaluateRecordController.ts index 7b3cce0..aaa5754 100644 --- a/src/controllers/EvaluateRecordController.ts +++ b/src/controllers/EvaluateRecordController.ts @@ -22,14 +22,8 @@ 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"; import permission from "../interfaces/permission"; @Route("api/v1/probation/evaluate-record") @@ -37,18 +31,15 @@ import permission from "../interfaces/permission"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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 ดึงข้อมูลตอนกดสร้างแบบบันทึกผล @@ -57,28 +48,13 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) 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", @@ -104,10 +80,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -130,11 +103,7 @@ export class EvaluateRecordController extends Controller { 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, @@ -161,22 +130,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) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้บังคับบัญชา" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา"); } const commander = await { @@ -197,7 +156,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -211,7 +170,7 @@ export class EvaluateRecordController extends Controller { async GetData( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -241,19 +200,11 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - throw 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, }, @@ -327,19 +278,18 @@ export class EvaluateRecordController extends Controller { 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 { @@ -390,7 +340,7 @@ export class EvaluateRecordController extends Controller { updatedAt: element.updatedAt, achievements: achievements, }; - }) + }), ); } @@ -401,10 +351,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -427,14 +374,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 }, }); @@ -453,7 +393,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -467,7 +407,7 @@ export class EvaluateRecordController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -490,10 +430,7 @@ export class EvaluateRecordController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -512,9 +449,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, @@ -527,12 +462,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( @@ -545,9 +477,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, @@ -556,7 +486,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -586,7 +516,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -601,7 +531,7 @@ export class EvaluateRecordController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -639,12 +569,9 @@ 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_strength_desc = requestBody.achievement_strength_desc; evaluate.achievement_improve_desc = requestBody.achievement_improve_desc; evaluate.conduct1_level = requestBody.conduct1_level; evaluate.conduct2_level = requestBody.conduct2_level; @@ -660,9 +587,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; @@ -672,12 +597,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({ @@ -692,9 +614,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, @@ -703,7 +623,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -713,7 +633,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -724,28 +644,13 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) 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", @@ -771,10 +676,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profileData = await this.personalRepository.findOne({ @@ -797,11 +699,7 @@ export class EvaluateRecordController extends Controller { 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, @@ -839,7 +737,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -853,7 +751,7 @@ export class EvaluateRecordController extends Controller { async GetDataCommander( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -883,19 +781,11 @@ export class EvaluateRecordController extends Controller { }); if (!evaluate) { - throw 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, }, @@ -969,19 +859,18 @@ export class EvaluateRecordController extends Controller { 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 { @@ -1032,7 +921,7 @@ export class EvaluateRecordController extends Controller { updatedAt: element.updatedAt, achievements: achievements, }; - }) + }), ); } @@ -1043,10 +932,7 @@ export class EvaluateRecordController extends Controller { }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.find({ @@ -1069,14 +955,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 }, }); @@ -1095,7 +974,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1109,7 +988,7 @@ export class EvaluateRecordController extends Controller { async PostDataCommander( @Query() assign_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -1132,10 +1011,7 @@ export class EvaluateRecordController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -1154,9 +1030,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, @@ -1169,12 +1043,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) => { @@ -1185,9 +1056,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, @@ -1196,7 +1065,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -1226,7 +1095,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1240,7 +1109,7 @@ export class EvaluateRecordController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateAssessor, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -1277,12 +1146,9 @@ 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_strength_desc = requestBody.achievement_strength_desc; evaluate.achievement_improve_desc = requestBody.achievement_improve_desc; evaluate.conduct1_level = requestBody.conduct1_level; evaluate.conduct2_level = requestBody.conduct2_level; @@ -1298,9 +1164,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; @@ -1310,12 +1174,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({ @@ -1330,9 +1191,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, @@ -1341,7 +1200,7 @@ export class EvaluateRecordController extends Controller { await this.evaluateAchievementRepository.save(evaluateAchievement, { data: request, }); - }) + }), ); } @@ -1351,7 +1210,7 @@ export class EvaluateRecordController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index a847360..5537219 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -24,10 +24,7 @@ import { Assign } from "../entities/Assign"; 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/probation/evaluate-result") @@ -35,17 +32,14 @@ import permission from "../interfaces/permission"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) 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 ข้อมูลตอนกดสร้างแบบรายงานการประเมินฯ @@ -54,28 +48,17 @@ 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) { try { - let _workflow = await new permission().Workflow( - request, - assign_id, - "SYS_PROBATION" - ); - if (_workflow == false) - await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); const assign = await this.assignRepository.findOne({ relations: ["profile"], where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const profile = await (assign.profile @@ -83,10 +66,7 @@ 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); @@ -97,10 +77,7 @@ export class EvaluateResultController extends Controller { }); if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } let mentors = []; @@ -113,10 +90,7 @@ export class EvaluateResultController extends Controller { personal_id: e.personal_id, dated: e.dated, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), position: e.position, posType: e.posType, posLevel: e.posLevel, @@ -124,9 +98,7 @@ export class EvaluateResultController extends Controller { } } - const commanderData = await (directorData.find( - (x) => x.role == "commander" - ) ?? null); + const commanderData = await (directorData.find((x) => x.role == "commander") ?? null); const commander = commanderData != null @@ -146,9 +118,7 @@ export class EvaluateResultController extends Controller { } : null; - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData != null ? { @@ -158,9 +128,7 @@ export class EvaluateResultController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), position: chairmanData.position, posType: chairmanData.posType, posLevel: chairmanData.posLevel, @@ -181,10 +149,7 @@ export class EvaluateResultController extends Controller { }); if (!resultData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลการประเมินผล" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมินผล"); } const result = await Promise.all( @@ -224,7 +189,7 @@ export class EvaluateResultController extends Controller { start_date: startDate, end_date: endDate, }; - }) + }), ); // const develop_complete = await (resultData.develop_orientation_score > 0 && @@ -251,7 +216,7 @@ export class EvaluateResultController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -265,7 +230,7 @@ export class EvaluateResultController extends Controller { async GetEvaluate( @Request() request: RequestWithUser, @Query() assign_id: string, - @Query() evaluate_no?: string + @Query() evaluate_no?: string, ) { try { await new permission().PermissionGet(request, "SYS_PROBATION"); @@ -299,10 +264,7 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const experimenteeData = await this.personalRepository.findOne({ @@ -332,11 +294,9 @@ export class EvaluateResultController extends Controller { experimenteeData.firstName + " " + experimenteeData.lastName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, + PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: experimenteeData.orgRootName, }; @@ -346,10 +306,7 @@ export class EvaluateResultController extends Controller { }); if (!directorData) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล ผู้บังคับบัญชาและประธาน"); } let mentors = []; @@ -362,10 +319,7 @@ export class EvaluateResultController extends Controller { personal_id: e.personal_id, dated: e.dated, name: e.fullname, - label: - e.fullname + - " " + - (e.position ? `(${e.position}${e.posLevel})` : ""), + label: e.fullname + " " + (e.position ? `(${e.position}${e.posLevel})` : ""), position: e.position + e.posLevel, posType: e.posType, posLevel: e.posLevel, @@ -401,9 +355,7 @@ export class EvaluateResultController extends Controller { posType: evaluate.authority_type, posLevel: evaluate.authority_level, }; - const chairmanData = await (directorData.find( - (x) => x.role == "chairman" - ) ?? null); + const chairmanData = await (directorData.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData != null ? { @@ -413,9 +365,7 @@ export class EvaluateResultController extends Controller { label: chairmanData.fullname + " " + - (chairmanData.position - ? `(${chairmanData.position}${chairmanData.posLevel})` - : ""), + (chairmanData.position ? `(${chairmanData.position}${chairmanData.posLevel})` : ""), position: chairmanData.position + chairmanData.posLevel, posType: chairmanData.posType, posLevel: chairmanData.posLevel, @@ -433,7 +383,7 @@ export class EvaluateResultController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -447,7 +397,7 @@ export class EvaluateResultController extends Controller { async PostData( @Query() assign_id: string, @Body() requestBody: CreateEvaluateResult, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -470,10 +420,7 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const postData: any = await { @@ -483,8 +430,7 @@ export class EvaluateResultController extends Controller { no: requestBody.evaluate_no, 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, @@ -501,7 +447,7 @@ export class EvaluateResultController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -515,7 +461,7 @@ export class EvaluateResultController extends Controller { async PatchData( @Query() assign_id: string, @Query() evaluate_no: number | string, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -525,10 +471,7 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const result = await this.evaluateResultRepository.findOne({ @@ -536,10 +479,7 @@ export class EvaluateResultController extends Controller { }); if (!result) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผลการประเมิน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผลการประเมิน"); } const personal = await this.personalRepository.findOne({ @@ -581,7 +521,7 @@ export class EvaluateResultController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -596,7 +536,7 @@ export class EvaluateResultController extends Controller { @Query() assign_id: string, @Query() evaluate_id: string, @Body() requestBody: CreateEvaluateResult, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { await new permission().PermissionUpdate(request, "SYS_PROBATION"); @@ -635,10 +575,7 @@ export class EvaluateResultController extends Controller { where: { id: assign_id }, }); if (!assign) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลแบบมอบหมายงาน" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); } const personal = await this.personalRepository.findOne({ where: { personal_id: assign.personal_id }, @@ -680,7 +617,7 @@ export class EvaluateResultController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 898ff12..7bcb1f7 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -104,7 +104,7 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -244,7 +244,7 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -287,7 +287,7 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index d291393..6c7a125 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -38,25 +38,18 @@ import { AssignOutput } from "../entities/AssignOutput"; @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) export class ReportController extends Controller { - private evaluateChairmanRepository = - AppDataSource.getRepository(EvaluateChairman); - private evaluateResultRepository = - AppDataSource.getRepository(EvaluateResult); + 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); + private evaluateAssessorRepository = AppDataSource.getRepository(EvaluateAssessor); + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector); + private evaluateAchievementRepository = AppDataSource.getRepository(EvaluateAchievement); + private evaluateCommanderRepository = AppDataSource.getRepository(EvaluateCommander); private appointRepository = AppDataSource.getRepository(Appoint); - private AppointDirectorRepository = - AppDataSource.getRepository(AppointDirector); + private AppointDirectorRepository = AppDataSource.getRepository(AppointDirector); private assignRepository = AppDataSource.getRepository(Assign); private assignOutputRepository = AppDataSource.getRepository(AssignOutput); /** @@ -66,10 +59,7 @@ export class ReportController extends Controller { * */ @Get("") - async GetReport( - @Query() assign_id: string, - @Query() evaluate_no: number = 1 - ) { + async GetReport(@Query() assign_id: string, @Query() evaluate_no: number = 1) { try { const evaluate = await this.evaluateChairmanRepository.findOne({ where: { assign_id, no: evaluate_no.toString() }, @@ -80,10 +70,7 @@ export class ReportController extends Controller { }); if (!evaluate || !result) { - throw new HttpError( - HttpStatusCode.NOT_FOUND, - "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ" - ); + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ"); } const develop_total_score = @@ -105,8 +92,7 @@ export class ReportController extends Controller { 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_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, @@ -129,7 +115,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -162,14 +148,14 @@ export class ReportController extends Controller { }, assign, }); - }) + }), ); return new HttpSuccess(data); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -202,14 +188,14 @@ export class ReportController extends Controller { }, assign, }); - }) + }), ); return new HttpSuccess(data); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -232,7 +218,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -246,7 +232,7 @@ export class ReportController extends Controller { async UpdateStatus( @Query() personal_id: string, @Body() requestBody: { command_no: string }, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { const personal = await this.personalRepository.findOne({ @@ -289,7 +275,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -303,7 +289,7 @@ export class ReportController extends Controller { async ChangeStatus( @Query() personal_id: string, @Body() reqBody: { status: number }, - @Request() request: RequestWithUser + @Request() request: RequestWithUser, ) { try { const personal = await this.personalRepository.findOne({ @@ -326,7 +312,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -348,15 +334,7 @@ export class ReportController extends Controller { } const directorData = await this.assignDirectorRepository.findOne({ - select: [ - "personal_id", - "fullname", - "position", - "posType", - "posLevel", - "role", - "dated", - ], + select: ["personal_id", "fullname", "position", "posType", "posLevel", "role", "dated"], where: { personal_id: evaluate.director_id }, }); @@ -617,10 +595,7 @@ export class ReportController extends Controller { const splitOc = await experimenteeData.organization.split(" "); const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); + const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, @@ -630,11 +605,9 @@ export class ReportController extends Controller { PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, + PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; const data = await { @@ -647,7 +620,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -658,10 +631,7 @@ export class ReportController extends Controller { * */ @Get("evaluate-commander") - async GetDataEvaluateCommander( - @Query() id: string, - @Request() request: RequestWithUser - ) { + async GetDataEvaluateCommander(@Query() id: string, @Request() request: RequestWithUser) { try { const evaluate = await this.evaluateCommanderRepository.findOne({ where: { id }, @@ -868,10 +838,7 @@ export class ReportController extends Controller { const splitOc = await experimenteeData.organization.split(" "); const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); + const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, @@ -881,11 +848,9 @@ export class ReportController extends Controller { PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, + PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; const commanderData = await this.assignDirectorRepository.findOne({ @@ -921,7 +886,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -932,10 +897,7 @@ export class ReportController extends Controller { * */ @Get("evaluate-chairman") - async GetDataEvaluateChairman( - @Query() id: string, - @Request() request: RequestWithUser - ) { + async GetDataEvaluateChairman(@Query() id: string, @Request() request: RequestWithUser) { try { const evaluate = await this.evaluateChairmanRepository.findOne({ where: { id }, @@ -945,15 +907,11 @@ export class ReportController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const develop_total_score = await (Number( - evaluate.develop_orientation_score - ) + + 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 - ) + + 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)); @@ -1126,8 +1084,7 @@ export class ReportController extends Controller { 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_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, @@ -1157,10 +1114,7 @@ export class ReportController extends Controller { const splitOc = await experimenteeData.organization.split(" "); const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace( - /\//g, - " " - ); + const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, @@ -1170,23 +1124,13 @@ export class ReportController extends Controller { PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: - splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", Oc: experimenteeData.orgRootName, - PositionLevel: - experimenteeData.positionName + experimenteeData.positionLevelName, + PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; const directorData = await this.assignDirectorRepository.find({ - select: [ - "personal_id", - "fullname", - "position", - "posType", - "posLevel", - "role", - "dated", - ], + select: ["personal_id", "fullname", "position", "posType", "posLevel", "role", "dated"], where: { assign_id: assign.id }, }); @@ -1201,20 +1145,16 @@ export class ReportController extends Controller { name: element.fullname, Position: element.position + element.posLevel, }; - }) + }), ); - const mentorData = await (director.find((x) => x.role == "mentor") ?? - null); + 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 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 chairmanData = await (director.find((x) => x.role == "chairman") ?? null); const chairman = chairmanData != null ? chairmanData : null; return new HttpSuccess({ @@ -1228,7 +1168,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1252,30 +1192,26 @@ export class ReportController extends Controller { commandDateAffect: Date | null; commandDateSign: Date | null; }[]; - } + }, ) { try { - await new CallAPI().PostData( - request, - "/org/command/excexute/salary-probation", - { - data: body.refIds.map((v) => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - } - ); + await new CallAPI().PostData(request, "/org/command/excexute/salary-probation", { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + }); const lists = await this.personalRepository.find({ where: { @@ -1287,14 +1223,14 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 9; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1305,7 +1241,7 @@ export class ReportController extends Controller { body: { refIds: string[]; status: string; - } + }, ) { try { const lists = await this.personalRepository.find({ @@ -1315,14 +1251,14 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 8; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1332,7 +1268,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; - } + }, ) { try { const lists = await this.personalRepository.find({ @@ -1342,14 +1278,14 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 2; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1373,31 +1309,27 @@ export class ReportController extends Controller { commandDateAffect: Date | null; commandDateSign: Date | null; }[]; - } + }, ) { try { - await new CallAPI().PostData( - request, - "/org/command/excexute/salary-probation-leave", - { - data: body.refIds.map((v) => ({ - profileId: v.refId, - commandId: v.commandId, - amount: v.amount, - amountSpecial: v.amountSpecial, - positionSalaryAmount: v.positionSalaryAmount, - mouthSalaryAmount: v.mouthSalaryAmount, - isGovernment: false, - commandNo: v.commandNo, - commandYear: v.commandYear, - commandDateAffect: v.commandDateAffect, - commandDateSign: v.commandDateSign, - commandCode: v.commandCode, - commandName: v.commandName, - remark: v.remark, - })), - } - ); + await new CallAPI().PostData(request, "/org/command/excexute/salary-probation-leave", { + data: body.refIds.map((v) => ({ + profileId: v.refId, + commandId: v.commandId, + amount: v.amount, + amountSpecial: v.amountSpecial, + positionSalaryAmount: v.positionSalaryAmount, + mouthSalaryAmount: v.mouthSalaryAmount, + isGovernment: false, + commandNo: v.commandNo, + commandYear: v.commandYear, + commandDateAffect: v.commandDateAffect, + commandDateSign: v.commandDateSign, + commandCode: v.commandCode, + commandName: v.commandName, + remark: v.remark, + })), + }); const lists = await this.personalRepository.find({ where: { @@ -1409,14 +1341,14 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 9; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1427,7 +1359,7 @@ export class ReportController extends Controller { body: { refIds: string[]; status: string; - } + }, ) { try { const lists = await this.personalRepository.find({ @@ -1437,13 +1369,13 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 8; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1453,7 +1385,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; - } + }, ) { try { const lists = await this.personalRepository.find({ @@ -1463,13 +1395,13 @@ export class ReportController extends Controller { lists.map(async (list) => { list.probation_status = 3; await this.personalRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1498,7 +1430,7 @@ export class ReportController extends Controller { refCommandName?: string | null; remark?: string | null; }[]; - } + }, ) { try { const lists = await this.appointRepository.find({ @@ -1509,13 +1441,13 @@ export class ReportController extends Controller { list.status = "DONE"; list.commandNo = `${body?.refIds[0]?.commandNo || ""}/${body.refIds[0].commandYear + 543}`; await this.appointRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1526,7 +1458,7 @@ export class ReportController extends Controller { body: { refIds: string[]; status: string; - } + }, ) { try { const lists = await this.appointRepository.find({ @@ -1536,13 +1468,13 @@ export class ReportController extends Controller { lists.map(async (list) => { list.status = body.status.trim().toUpperCase(); await this.appointRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1552,7 +1484,7 @@ export class ReportController extends Controller { @Body() body: { refIds: string[]; - } + }, ) { try { const lists = await this.appointRepository.find({ @@ -1562,21 +1494,18 @@ export class ReportController extends Controller { lists.map(async (list) => { list.status = "PENDING"; await this.appointRepository.save(list); - }) + }), ); return new HttpSuccess(); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @Get("command10/appoints/{refId}") - public async appointList( - @Request() req: RequestWithUser, - @Path() refId: string - ) { + public async appointList(@Request() req: RequestWithUser, @Path() refId: string) { try { const lists = await this.AppointDirectorRepository.find({ where: { appointId: refId }, @@ -1592,13 +1521,13 @@ export class ReportController extends Controller { positionLevel: director.positionLevel, role: director.role === "chairman" ? "ประธาน" : "กรรมการ", }; - }) + }), ); return new HttpSuccess(directors); } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1608,7 +1537,7 @@ export class ReportController extends Controller { @Query("nodeId") nodeId?: string, @Query("node") node?: string, @Query("startDate") startDate?: Date, - @Query("endDate") endDate?: Date + @Query("endDate") endDate?: Date, ) { interface Result { [rootDnaId: string]: { @@ -1632,9 +1561,7 @@ export class ReportController extends Controller { const rootNodeFalse = rootNode["isRootFalse"]; let whereRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? { rootDna: rootNodeTrue.rootDnaId } - : {}; + rootNodeTrue && rootNodeTrue.rootDnaId ? { rootDna: rootNodeTrue.rootDnaId } : {}; let listsRootTrue = rootNodeTrue && rootNodeTrue.rootDnaId ? await this.personalRepository.find({ @@ -1684,9 +1611,7 @@ export class ReportController extends Controller { } if (status >= 1 && status <= 7) { - (resultTrue[rootDnaId] as { [key: string]: any })[ - `status${status}` - ]++; + (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; } }); listsRootFalse.forEach((item) => { @@ -1708,161 +1633,100 @@ export class ReportController extends Controller { } if (status >= 1 && status <= 7) { - (resultFalse[rootDnaId] as { [key: string]: any })[ - `status${status}` - ]++; + (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; } }); const resultTruePass = Object.values(resultTrue).reduce( (sum, { status2 }) => sum + status2, - 0 + 0, ); const resultTrueExtand = Object.values(resultTrue).reduce( (sum, { status7 }) => sum + status7, - 0 + 0, ); const resultTrueSuspension = "-"; const resultTrueChangePos = Object.values(resultTrue).reduce( (sum, { status4 }) => sum + status4, - 0 + 0, ); const resultTrueResign = Object.values(resultTrue).reduce( (sum, { status5 }) => sum + status5, - 0 + 0, ); const resultTrueDeceased = Object.values(resultTrue).reduce( (sum, { status6 }) => sum + status6, - 0 + 0, ); const resultTrueNotPass = Object.values(resultTrue).reduce( (sum, { status3 }) => sum + status3, - 0 + 0, ); const resultFalsePass = Object.values(resultFalse).reduce( (sum, { status2 }) => sum + status2, - 0 + 0, ); const resultFalseExtand = Object.values(resultFalse).reduce( (sum, { status7 }) => sum + status7, - 0 + 0, ); const resultFalseSuspension = "-"; const resultFalseChangePos = Object.values(resultFalse).reduce( (sum, { status4 }) => sum + status4, - 0 + 0, ); const resultFalseResign = Object.values(resultFalse).reduce( (sum, { status5 }) => sum + status5, - 0 + 0, ); const resultFalseDeceased = Object.values(resultFalse).reduce( (sum, { status6 }) => sum + status6, - 0 + 0, ); const resultFalseNotPass = Object.values(resultFalse).reduce( (sum, { status3 }) => sum + status3, - 0 + 0, ); const sumPass = - Object.values(resultTrue).reduce( - (sum, { status2 }) => sum + status2, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); const sumExtand = - Object.values(resultTrue).reduce( - (sum, { status7 }) => sum + status7, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); const sumSuspension = "-"; const sumChangePos = - Object.values(resultTrue).reduce( - (sum, { status4 }) => sum + status4, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); const sumResign = - Object.values(resultTrue).reduce( - (sum, { status5 }) => sum + status5, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); const sumDeceased = - Object.values(resultTrue).reduce( - (sum, { status6 }) => sum + status6, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); const sumNotPass = - Object.values(resultTrue).reduce( - (sum, { status3 }) => sum + status3, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); const sumResultTrue = Object.values(resultTrue).reduce( (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 - ); + return total + status2 + status7 + status4 + status5 + status6 + status3; }, - 0 + 0, ); const sumResultFalse = Object.values(resultFalse).reduce( (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 - ); + return total + status2 + status7 + status4 + status5 + status6 + status3; }, - 0 - ); - const sumAll = - sumPass + - sumExtand + - sumChangePos + - sumResign + - sumDeceased + - sumNotPass; - const nowDate = Extension.ToThaiNumber( - Extension.ToThaiShortDate(new Date()) + 0, ); + const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); const formattedData = { topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", dateNow: nowDate, - dateStart: startDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) - : "", - dateEnd: endDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) - : "", + dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", + dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultTrue[rootDnaId]; + const { status2, status7, status4, status5, status6, status3, rootName } = + resultTrue[rootDnaId]; const sum = status2 + status7 + status4 + status5 + status6 + status3; return { rowNo: (index + 1).toString(), @@ -1885,33 +1749,23 @@ export class ReportController extends Controller { resultTrueDeceased: resultTrueDeceased.toString(), resultTrueNotPass: resultTrueNotPass.toString(), topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map( - (rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultFalse[rootDnaId]; - const sum = - status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - } - ), + resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultFalse[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), resultFalsePass: resultFalsePass.toString(), resultFalseExtand: resultFalseExtand.toString(), resultFalseSuspension: "-", @@ -1938,7 +1792,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -1948,7 +1802,7 @@ export class ReportController extends Controller { @Query("nodeId") nodeId?: string, @Query("node") node?: number, @Query("startDate") startDate?: Date, - @Query("endDate") endDate?: Date + @Query("endDate") endDate?: Date, ) { try { let personal = null; @@ -1979,7 +1833,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); break; } @@ -2008,7 +1862,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); break; } @@ -2037,7 +1891,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); break; } @@ -2066,7 +1920,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); break; } @@ -2095,7 +1949,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); break; } @@ -2116,7 +1970,7 @@ export class ReportController extends Controller { idcard: p.idcard, assigns: assigns, }; - }) + }), ); } } @@ -2137,10 +1991,9 @@ export class ReportController extends Controller { }) .catch((errr) => {}); - const evaluateComman = - await this.evaluateCommanderRepository.findOne({ - where: { assign_id: assign.id ?? "" }, - }); + const evaluateComman = await this.evaluateCommanderRepository.findOne({ + where: { assign_id: assign.id ?? "" }, + }); return { no: Extension.ToThaiNumber(x.no.toString()), @@ -2153,44 +2006,26 @@ export class ReportController extends Controller { : "", dateStart: x.assigns.length > 0 && assign.date_start != null - ? Extension.ToThaiNumber( - Extension.ToThaiFullDate2(assign.date_start) - ) + ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_start)) : "", dateFinish: x.assigns.length > 0 && assign.date_finish != null - ? Extension.ToThaiNumber( - Extension.ToThaiFullDate2(assign.date_finish) - ) + ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_finish)) : "", day: - x.assigns.length > 0 && - assign.date_start != null && - assign.date_finish != null + x.assigns.length > 0 && assign.date_start != null && assign.date_finish != null ? Extension.ToThaiNumber( - `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน` + `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน`, ) : "", - status: x.probation_status - ? Extension.probationStatus(x.probation_status) - : "", - orientation: - evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", - learning: - evaluateComman && evaluateComman?.self_learning == 1 - ? "☑" - : "☐", - seminar: - evaluateComman && evaluateComman?.training_seminar == 1 - ? "☑" - : "☐", - other: - evaluateComman && evaluateComman?.other_training == 1 - ? "☑" - : "☐", + status: x.probation_status ? Extension.probationStatus(x.probation_status) : "", + orientation: evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", + learning: evaluateComman && evaluateComman?.self_learning == 1 ? "☑" : "☐", + seminar: evaluateComman && evaluateComman?.training_seminar == 1 ? "☑" : "☐", + other: evaluateComman && evaluateComman?.other_training == 1 ? "☑" : "☐", }; - }) - ) + }), + ), ); return new HttpSuccess({ @@ -2205,7 +2040,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -2215,7 +2050,7 @@ export class ReportController extends Controller { @Query("nodeId") nodeId?: string, @Query("node") node?: string, @Query("startDate") startDate?: Date, - @Query("endDate") endDate?: Date + @Query("endDate") endDate?: Date, ) { interface Result { [rootDnaId: string]: { @@ -2240,9 +2075,7 @@ export class ReportController extends Controller { const rootNodeFalse = rootNode["isRootFalse"]; let whereRootTrue = - rootNodeTrue && rootNodeTrue.rootDnaId - ? { rootDna: rootNodeTrue.rootDnaId } - : {}; + rootNodeTrue && rootNodeTrue.rootDnaId ? { rootDna: rootNodeTrue.rootDnaId } : {}; let listsRootTrue = rootNodeTrue && rootNodeTrue.rootDnaId ? await this.personalRepository.find({ @@ -2292,9 +2125,7 @@ export class ReportController extends Controller { } if (status >= 1 && status <= 7) { - (resultTrue[rootDnaId] as { [key: string]: any })[ - `status${status}` - ]++; + (resultTrue[rootDnaId] as { [key: string]: any })[`status${status}`]++; } }); listsRootFalse.forEach((item) => { @@ -2316,162 +2147,101 @@ export class ReportController extends Controller { } if (status >= 1 && status <= 7) { - (resultFalse[rootDnaId] as { [key: string]: any })[ - `status${status}` - ]++; + (resultFalse[rootDnaId] as { [key: string]: any })[`status${status}`]++; } }); const resultTruePass = Object.values(resultTrue).reduce( (sum, { status2 }) => sum + status2, - 0 + 0, ); const resultTrueExtand = Object.values(resultTrue).reduce( (sum, { status7 }) => sum + status7, - 0 + 0, ); const resultTrueSuspension = "-"; const resultTrueChangePos = Object.values(resultTrue).reduce( (sum, { status4 }) => sum + status4, - 0 + 0, ); const resultTrueResign = Object.values(resultTrue).reduce( (sum, { status5 }) => sum + status5, - 0 + 0, ); const resultTrueDeceased = Object.values(resultTrue).reduce( (sum, { status6 }) => sum + status6, - 0 + 0, ); const resultTrueNotPass = Object.values(resultTrue).reduce( (sum, { status3 }) => sum + status3, - 0 + 0, ); const resultFalsePass = Object.values(resultFalse).reduce( (sum, { status2 }) => sum + status2, - 0 + 0, ); const resultFalseExtand = Object.values(resultFalse).reduce( (sum, { status7 }) => sum + status7, - 0 + 0, ); const resultFalseSuspension = "-"; const resultFalseChangePos = Object.values(resultFalse).reduce( (sum, { status4 }) => sum + status4, - 0 + 0, ); const resultFalseResign = Object.values(resultFalse).reduce( (sum, { status5 }) => sum + status5, - 0 + 0, ); const resultFalseDeceased = Object.values(resultFalse).reduce( (sum, { status6 }) => sum + status6, - 0 + 0, ); const resultFalseNotPass = Object.values(resultFalse).reduce( (sum, { status3 }) => sum + status3, - 0 + 0, ); const sumPass = - Object.values(resultTrue).reduce( - (sum, { status2 }) => sum + status2, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status2 }) => sum + status2, - 0 - ); + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); const sumExtand = - Object.values(resultTrue).reduce( - (sum, { status7 }) => sum + status7, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status7 }) => sum + status7, - 0 - ); + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); const sumSuspension = "-"; const sumChangePos = - Object.values(resultTrue).reduce( - (sum, { status4 }) => sum + status4, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status4 }) => sum + status4, - 0 - ); + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); const sumResign = - Object.values(resultTrue).reduce( - (sum, { status5 }) => sum + status5, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status5 }) => sum + status5, - 0 - ); + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); const sumDeceased = - Object.values(resultTrue).reduce( - (sum, { status6 }) => sum + status6, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status6 }) => sum + status6, - 0 - ); + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); const sumNotPass = - Object.values(resultTrue).reduce( - (sum, { status3 }) => sum + status3, - 0 - ) + - Object.values(resultFalse).reduce( - (sum, { status3 }) => sum + status3, - 0 - ); + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); const sumResultTrue = Object.values(resultTrue).reduce( (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 - ); + return total + status2 + status7 + status4 + status5 + status6 + status3; }, - 0 + 0, ); const sumResultFalse = Object.values(resultFalse).reduce( (total, { status2, status7, status4, status5, status6, status3 }) => { - return ( - total + status2 + status7 + status4 + status5 + status6 + status3 - ); + return total + status2 + status7 + status4 + status5 + status6 + status3; }, - 0 - ); - const sumAll = - sumPass + - sumExtand + - sumChangePos + - sumResign + - sumDeceased + - sumNotPass; - const nowDate = Extension.ToThaiNumber( - Extension.ToThaiShortDate(new Date()) + 0, ); + const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); const formattedData = { topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", dateNow: nowDate, accExam: "", - dateStart: startDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) - : "", - dateEnd: endDate - ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) - : "", + dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", + dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", resultTrueProbation: Object.keys(resultTrue).map((rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultTrue[rootDnaId]; + const { status2, status7, status4, status5, status6, status3, rootName } = + resultTrue[rootDnaId]; const sum = status2 + status7 + status4 + status5 + status6 + status3; return { rowNo: (index + 1).toString(), @@ -2494,33 +2264,23 @@ export class ReportController extends Controller { resultTrueDeceased: resultTrueDeceased.toString(), resultTrueNotPass: resultTrueNotPass.toString(), topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map( - (rootDnaId, index) => { - const { - status2, - status7, - status4, - status5, - status6, - status3, - rootName, - } = resultFalse[rootDnaId]; - const sum = - status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo: (index + 1).toString(), - rootName: rootName.toString(), - pass: status2.toString(), - extand: status7.toString(), - suspension: "-", - changePos: status4.toString(), - resign: status5.toString(), - deceased: status6.toString(), - notPass: status3.toString(), - total: sum.toString(), - }; - } - ), + resultFalseProbation: Object.keys(resultFalse).map((rootDnaId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultFalse[rootDnaId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), resultFalsePass: resultFalsePass.toString(), resultFalseExtand: resultFalseExtand.toString(), resultFalseSuspension: "-", @@ -2547,7 +2307,7 @@ export class ReportController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } } diff --git a/src/controllers/SurveyController.ts b/src/controllers/SurveyController.ts index 58f458b..889abca 100644 --- a/src/controllers/SurveyController.ts +++ b/src/controllers/SurveyController.ts @@ -70,7 +70,7 @@ export class SurveyController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -107,7 +107,7 @@ export class SurveyController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } } @@ -183,7 +183,7 @@ export class SurveyController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error); + } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); } // await new permission().PermissionUpdate(request, "SYS_PROBATION"); } From 9d45d6b0e7482c96951a21af90bc146e06d06386 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 6 Jun 2025 15:13:41 +0700 Subject: [PATCH 15/18] add save child name --- src/controllers/PersonalController.ts | 14 +- src/entities/Personal.ts | 393 +++++++++--------- .../1749186876022-personal-add-child-name.ts | 20 + 3 files changed, 235 insertions(+), 192 deletions(-) create mode 100644 src/migration/1749186876022-personal-add-child-name.ts diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 7bcb1f7..09d9c18 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -89,10 +89,16 @@ export class PersonalController extends Controller { personalData.child4 = requestBody.child4; personalData.rootDna = requestBody.rootDna; - personalData.child1Dna = requestBody.child1Dna; - personalData.child2Dna = requestBody.child2Dna; - personalData.child3Dna = requestBody.child3Dna; - personalData.child4Dna = requestBody.child4Dna; + personalData.child1Dna = requestBody.orgChild1Dna; + personalData.child2Dna = requestBody.orgChild2Dna; + personalData.child3Dna = requestBody.orgChild3Dna; + personalData.child4Dna = requestBody.orgChild4Dna; + + const getFieldValue = (field: string | null | undefined): string => field ?? ""; + personalData.orgChild1Name = getFieldValue(requestBody.orgChild1Name); + personalData.orgChild2Name = getFieldValue(requestBody.orgChild2Name); + personalData.orgChild3Name = getFieldValue(requestBody.orgChild3Name); + personalData.orgChild4Name = getFieldValue(requestBody.orgChild4Name); const before = null; const personal = await this.personalRepository.save(personalData, { diff --git a/src/entities/Personal.ts b/src/entities/Personal.ts index 6e3217e..e72fd85 100644 --- a/src/entities/Personal.ts +++ b/src/entities/Personal.ts @@ -1,230 +1,247 @@ -import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, OneToMany } from "typeorm" -import { EntityBase } from "./base/Base" -import { Assign } from "./Assign" -import { Appoint } from "./Appoint" -import { Survey } from "./Survey" +import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, OneToMany } from "typeorm"; +import { EntityBase } from "./base/Base"; +import { Assign } from "./Assign"; +import { Appoint } from "./Appoint"; +import { Survey } from "./Survey"; @Entity("personal") export class Personal extends EntityBase { - @PrimaryGeneratedColumn("uuid") - personal_id: string + @PrimaryGeneratedColumn("uuid") + personal_id: string; - @Column({ - nullable: true, - comment: "เลขที่คำสั่งบรรจุ", - }) - order_number!: string + @Column({ + nullable: true, + comment: "เลขที่คำสั่งบรรจุ", + }) + order_number!: string; - @Column({ - nullable: false, - comment: - "1 อยู่ระหว่างการทดลองปฏิบัติหน้าที่ราชการ, 2 พ้นการทดลองปฏิบัติหน้าที่ราชการ, 3 ไม่พ้นการทดลองปฏิบัติหน้าที่ราชการ, 4 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากเปลี่ยนตำแหน่ง, 5 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากลาออก, 6 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากถึงแก่กรรม, 7 ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการ, 8 ดึงรายชื่อไปออกคำสั่งแล้ว", - default: 1, - }) - probation_status: number + @Column({ + nullable: false, + comment: + "1 อยู่ระหว่างการทดลองปฏิบัติหน้าที่ราชการ, 2 พ้นการทดลองปฏิบัติหน้าที่ราชการ, 3 ไม่พ้นการทดลองปฏิบัติหน้าที่ราชการ, 4 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากเปลี่ยนตำแหน่ง, 5 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากลาออก, 6 ยุติการทดลองปฏิบัติหน้าที่ราชการเนื่องจากถึงแก่กรรม, 7 ขยายระยะเวลาทดลองปฏิบัติหน้าที่ราชการ, 8 ดึงรายชื่อไปออกคำสั่งแล้ว", + default: 1, + }) + probation_status: number; - @Column({ - nullable: false, - comment: "สถานะการใช้งาน 1 คือใช้งานปกติ, 0 คือไม่ใช้งาน", - default: 1, - }) - active: number + @Column({ + nullable: false, + comment: "สถานะการใช้งาน 1 คือใช้งานปกติ, 0 คือไม่ใช้งาน", + default: 1, + }) + active: number; - @Column({ - nullable: true, - comment: "คำนำหน้าชื่อ", - }) - prefixName: string + @Column({ + nullable: true, + comment: "คำนำหน้าชื่อ", + }) + prefixName: string; - @Column({ - nullable: false, - comment: "ชื่อ", - }) - firstName: string + @Column({ + nullable: false, + comment: "ชื่อ", + }) + firstName: string; - @Column({ - nullable: false, - comment: "นามสกุล", - }) - lastName: string + @Column({ + nullable: false, + comment: "นามสกุล", + }) + lastName: string; - @Column({ - type: Boolean, - comment: "สถานะการทดลองงาน 1 คืออยู่ระหว่างการทดลองงาน, 0 คือไม่อยู่ระหว่างการทดลองงาน", - default: 0, - }) - isProbation: number + @Column({ + type: Boolean, + comment: "สถานะการทดลองงาน 1 คืออยู่ระหว่างการทดลองงาน, 0 คือไม่อยู่ระหว่างการทดลองงาน", + default: 0, + }) + isProbation: number; - @Column({ - nullable: true, - comment: "ตำแหน่งในสายงาน", - }) - positionName: string + @Column({ + nullable: true, + comment: "ตำแหน่งในสายงาน", + }) + positionName: string; - @Column({ - nullable: true, - comment: "เลขที่ตำแหน่ง", - }) - posNo: string + @Column({ + nullable: true, + comment: "เลขที่ตำแหน่ง", + }) + posNo: string; - @Column({ - nullable: true, - comment: "ระดับตำแหน่ง", - }) - positionLevelName: string + @Column({ + nullable: true, + comment: "ระดับตำแหน่ง", + }) + positionLevelName: string; - @Column({ - nullable: true, - comment: "ด้าน/สาขา", - }) - positionLineName: string + @Column({ + nullable: true, + comment: "ด้าน/สาขา", + }) + positionLineName: string; - @Column({ - nullable: true, - comment: "ประเภทตำแหน่ง", - }) - positionTypeName: string + @Column({ + nullable: true, + comment: "ประเภทตำแหน่ง", + }) + positionTypeName: string; - @Column({ - nullable: true, - comment: "หน่วยงาน", - }) - orgRootName: string + @Column({ + nullable: true, + comment: "หน่วยงาน", + }) + orgRootName: string; - @Column({ - nullable: true, - comment: "สังกัด", - }) - organization: string + @Column({ + nullable: true, + comment: "สังกัด", + }) + organization: string; - @Column({ - nullable: true, - comment: "เลขบัตรประจำตัวประชาชน", - }) - idcard: string + @Column({ + nullable: true, + comment: "เลขบัตรประจำตัวประชาชน", + }) + idcard: string; - @Column({ nullable: true, comment: "id หน่วยงาน root", default: null }) - root: string + @Column({ nullable: true, comment: "id หน่วยงาน root", default: null }) + root: string; - @Column({ nullable: true, comment: "id หน่วยงาน child1", default: null }) - child1: string + @Column({ nullable: true, comment: "id หน่วยงาน child1", default: null }) + child1: string; - @Column({ nullable: true, comment: "id หน่วยงาน child2", default: null }) - child2: string + @Column({ nullable: true, comment: "id หน่วยงาน child2", default: null }) + child2: string; - @Column({ nullable: true, comment: "id หน่วยงาน child3", default: null }) - child3: string + @Column({ nullable: true, comment: "id หน่วยงาน child3", default: null }) + child3: string; - @Column({ nullable: true, comment: "id หน่วยงาน child4", default: null }) - child4: string + @Column({ nullable: true, comment: "id หน่วยงาน child4", default: null }) + child4: string; - @Column({ nullable: true, comment: "id หน่วยงาน root", default: null }) - rootDna: string + @Column({ nullable: true, comment: "id หน่วยงาน root", default: null }) + rootDna: string; - @Column({ nullable: true, comment: "id หน่วยงาน child1", default: null }) - child1Dna: string + @Column({ nullable: true, comment: "id หน่วยงาน child1", default: null }) + child1Dna: string; - @Column({ nullable: true, comment: "id หน่วยงาน child2", default: null }) - child2Dna: string + @Column({ nullable: true, comment: "id หน่วยงาน child2", default: null }) + child2Dna: string; - @Column({ nullable: true, comment: "id หน่วยงาน child3", default: null }) - child3Dna: string + @Column({ nullable: true, comment: "id หน่วยงาน child3", default: null }) + child3Dna: string; - @Column({ nullable: true, comment: "id หน่วยงาน child4", default: null }) - child4Dna: string + @Column({ nullable: true, comment: "id หน่วยงาน child4", default: null }) + child4Dna: string; - @OneToMany(() => Assign, (assign: Assign) => assign.personal_id) - @JoinColumn({ name: "id" }) - assign: Assign[] + @Column({ nullable: true, comment: "ชื่อ หน่วยงาน child1", default: null }) + orgChild1Name: string; - @OneToOne(() => Appoint, appoint => appoint.personal) - @JoinColumn() - appoint: Appoint + @Column({ nullable: true, comment: "ชื่อ หน่วยงาน child2", default: null }) + orgChild2Name: string; - @OneToOne(() => Survey, { nullable: true }) - survey: Survey | null + @Column({ nullable: true, comment: "ชื่อ หน่วยงาน child3", default: null }) + orgChild3Name: string; + + @Column({ nullable: true, comment: "ชื่อ หน่วยงาน child4", default: null }) + orgChild4Name: string; + + @OneToMany(() => Assign, (assign: Assign) => assign.personal_id) + @JoinColumn({ name: "id" }) + assign: Assign[]; + + @OneToOne(() => Appoint, (appoint) => appoint.personal) + @JoinColumn() + appoint: Appoint; + + @OneToOne(() => Survey, { nullable: true }) + survey: Survey | null; } export class CreatePersonal { - @Column() - personal_id: string - @Column() - order_number: string - @Column() - probation_status: number - // @Column() - // profiles: PersonalProfile; - @Column() - createdUserId: string - @Column() - createdFullName: string - @Column() - updateUserId: string - @Column() - updateFullName: string - @Column() - prefixName: string - @Column() - firstName: string - @Column() - lastName: string - @Column() - isProbation: number - @Column() - positionName: string - @Column() - posNo: string - @Column() - positionLevelName: string - @Column() - positionTypeName: string - @Column() - positionLineName: string - @Column() - orgRootName: string - @Column() - organization: string - @Column() - idcard: string + @Column() + personal_id: string; + @Column() + order_number: string; + @Column() + probation_status: number; + // @Column() + // profiles: PersonalProfile; + @Column() + createdUserId: string; + @Column() + createdFullName: string; + @Column() + updateUserId: string; + @Column() + updateFullName: string; + @Column() + prefixName: string; + @Column() + firstName: string; + @Column() + lastName: string; + @Column() + isProbation: number; + @Column() + positionName: string; + @Column() + posNo: string; + @Column() + positionLevelName: string; + @Column() + positionTypeName: string; + @Column() + positionLineName: string; + @Column() + orgRootName: string; + @Column() + organization: string; + @Column() + idcard: string; } export class PostPersonal { - id: string - prefix: string - firstName: string - lastName: string - isProbation: boolean - posTypeName?: string | null - posLevelName: string | null - position: string | null - posLineName?: string | null - posNo?: string | null - organization?: string - orgRootName: string | null - orgChild1Name?: string | null - orgChild2Name?: string | null - orgChild3Name?: string | null - orgChild4Name?: string | null + id: string; + prefix: string; + firstName: string; + lastName: string; + isProbation: boolean; + posTypeName?: string | null; + posLevelName: string | null; + position: string | null; + posLineName?: string | null; + posNo?: string | null; + organization?: string; + orgRootName: string | null; + orgChild1Name?: string | null; + orgChild2Name?: string | null; + orgChild3Name?: string | null; + orgChild4Name?: string | null; - order_number?: string - rank?: string | null - idcard?: string - positionField?: string | null - positionArea?: string | null - posExecutiveName?: string | null - positionExecutiveField?: string | null + order_number?: string; + rank?: string | null; + idcard?: string; + positionField?: string | null; + positionArea?: string | null; + posExecutiveName?: string | null; + positionExecutiveField?: string | null; - root?: string | null - child1?: string | null - child2?: string | null - child3?: string | null - child4?: string | null + root?: string | null; + child1?: string | null; + child2?: string | null; + child3?: string | null; + child4?: string | null; - rootDna?: string | null - child1Dna?: string | null - child2Dna?: string | null - child3Dna?: string | null - child4Dna?: string | null + rootDna?: string | null; + child1Dna?: string | null; + child2Dna?: string | null; + child3Dna?: string | null; + child4Dna?: string | null; + + orgChild1Dna?: string | null; + orgChild2Dna?: string | null; + orgChild3Dna?: string | null; + orgChild4Dna?: string | null; } -export type UpdatePersonal = Partial +export type UpdatePersonal = Partial; diff --git a/src/migration/1749186876022-personal-add-child-name.ts b/src/migration/1749186876022-personal-add-child-name.ts new file mode 100644 index 0000000..1997ac6 --- /dev/null +++ b/src/migration/1749186876022-personal-add-child-name.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class PersonalAddChildName1749186876022 implements MigrationInterface { + name = 'PersonalAddChildName1749186876022' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`personal\` ADD \`orgChild1Name\` varchar(255) NULL COMMENT 'ชื่อ หน่วยงาน child1'`); + await queryRunner.query(`ALTER TABLE \`personal\` ADD \`orgChild2Name\` varchar(255) NULL COMMENT 'ชื่อ หน่วยงาน child2'`); + await queryRunner.query(`ALTER TABLE \`personal\` ADD \`orgChild3Name\` varchar(255) NULL COMMENT 'ชื่อ หน่วยงาน child3'`); + await queryRunner.query(`ALTER TABLE \`personal\` ADD \`orgChild4Name\` varchar(255) NULL COMMENT 'ชื่อ หน่วยงาน child4'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`personal\` DROP COLUMN \`orgChild4Name\``); + await queryRunner.query(`ALTER TABLE \`personal\` DROP COLUMN \`orgChild3Name\``); + await queryRunner.query(`ALTER TABLE \`personal\` DROP COLUMN \`orgChild2Name\``); + await queryRunner.query(`ALTER TABLE \`personal\` DROP COLUMN \`orgChild1Name\``); + } + +} From eb5e25987431cf62163fbf7d356346bed8496884 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 6 Jun 2025 15:59:23 +0700 Subject: [PATCH 16/18] fix organization --- src/controllers/AssignController.ts | 24 +++++++---- src/controllers/EvaluateResultController.ts | 12 ++++-- src/controllers/ReportController.ts | 45 ++++++++++++--------- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index dfd6062..b7d7db1 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -641,14 +641,18 @@ export class AssignController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } - const splitOc = await profileData.organization.split(" "); - const splitOcAmount = await splitOc.length; + // const splitOc = await profileData.organization.split(" "); + // const splitOcAmount = await splitOc.length; const profile = { ...profileData, name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, Position: profileData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: profileData.orgChild2Name + ? (profileData.orgChild4Name ? profileData.orgChild4Name + " " : "") + + (profileData.orgChild3Name ? profileData.orgChild3Name + " " : "") + + (profileData.orgChild2Name ? profileData.orgChild2Name + " " : "") + : "-", + Department: profileData.orgChild1Name ?? "-", Oc: profileData.orgRootName, PositionAndLevel: profileData.positionName + profileData.positionLevelName, }; @@ -890,14 +894,18 @@ export class AssignController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } - const splitOc = await profileData.organization.split(" "); - const splitOcAmount = await splitOc.length; + // const splitOc = await profileData.organization.split(" "); + // const splitOcAmount = await splitOc.length; const profile = { ...profileData, name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, Position: profileData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: profileData.orgChild2Name + ? (profileData.orgChild4Name ? profileData.orgChild4Name + " " : "") + + (profileData.orgChild3Name ? profileData.orgChild3Name + " " : "") + + (profileData.orgChild2Name ? profileData.orgChild2Name + " " : "") + : "-", + Department: profileData.orgChild1Name ?? "-", Oc: profileData.orgRootName, PositionAndLevel: profileData.positionName + profileData.positionLevelName, }; diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index 5537219..5765c01 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -285,8 +285,8 @@ export class EvaluateResultController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } - const splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; + // const splitOc = await experimenteeData.organization.split(" "); + // const splitOcAmount = await splitOc.length; const experimentee = await { ...experimenteeData, name: @@ -295,8 +295,12 @@ export class EvaluateResultController extends Controller { " " + experimenteeData.lastName, PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: experimenteeData.orgChild2Name + ? (experimenteeData.orgChild4Name ? experimenteeData.orgChild4Name + " " : "") + + (experimenteeData.orgChild3Name ? experimenteeData.orgChild3Name + " " : "") + + (experimenteeData.orgChild2Name ? experimenteeData.orgChild2Name + " " : "") + : "-", + Department: experimenteeData.orgChild1Name ?? "-", Oc: experimenteeData.orgRootName, }; diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 6c7a125..ead19a5 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -593,19 +593,22 @@ export class ReportController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace(/\//g, " "); + // const splitOc = await experimenteeData.organization.split(" "); + // const splitOcAmount = await splitOc.length; + // const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, - organization: organization, name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, PositionLevelName: experimenteeData.positionLevelName, PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: experimenteeData.orgChild2Name + ? (experimenteeData.orgChild4Name ? experimenteeData.orgChild4Name + " " : "") + + (experimenteeData.orgChild3Name ? experimenteeData.orgChild3Name + " " : "") + + (experimenteeData.orgChild2Name ? experimenteeData.orgChild2Name + " " : "") + : "-", + Department: experimenteeData.orgChild1Name ?? "-", Oc: experimenteeData.orgRootName, PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; @@ -836,19 +839,22 @@ export class ReportController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace(/\//g, " "); + // const splitOc = await experimenteeData.organization.split(" "); + // const splitOcAmount = await splitOc.length; + // const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, - organization: organization, name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, PositionLevelName: experimenteeData.positionLevelName, PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: experimenteeData.orgChild2Name + ? (experimenteeData.orgChild4Name ? experimenteeData.orgChild4Name + " " : "") + + (experimenteeData.orgChild3Name ? experimenteeData.orgChild3Name + " " : "") + + (experimenteeData.orgChild2Name ? experimenteeData.orgChild2Name + " " : "") + : "-", + Department: experimenteeData.orgChild1Name ?? "-", Oc: experimenteeData.orgRootName, PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; @@ -1112,19 +1118,22 @@ export class ReportController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } - const splitOc = await experimenteeData.organization.split(" "); - const splitOcAmount = await splitOc.length; - const organization = await experimenteeData.organization.replace(/\//g, " "); + // const splitOc = await experimenteeData.organization.split(" "); + // const splitOcAmount = await splitOc.length; + // const organization = await experimenteeData.organization.replace(/\//g, " "); const experimentee = await { ...experimenteeData, - organization: organization, name: `${experimenteeData.prefixName}${experimenteeData.firstName} ${experimenteeData.lastName}`, PositionLevelName: experimenteeData.positionLevelName, PositionLineName: experimenteeData.positionLineName, Position: experimenteeData.positionName, - Department: splitOcAmount > 2 ? splitOc[splitOcAmount - 3] : "-", - OrganizationOrganization: splitOcAmount > 1 ? splitOc[splitOcAmount - 2] : "-", + OrganizationOrganization: experimenteeData.orgChild2Name + ? (experimenteeData.orgChild4Name ? experimenteeData.orgChild4Name + " " : "") + + (experimenteeData.orgChild3Name ? experimenteeData.orgChild3Name + " " : "") + + (experimenteeData.orgChild2Name ? experimenteeData.orgChild2Name + " " : "") + : "-", + Department: experimenteeData.orgChild1Name ?? "-", Oc: experimenteeData.orgRootName, PositionLevel: experimenteeData.positionName + experimenteeData.positionLevelName, }; From c6ef604c5fb5e55e5ec632889769c14bd07f389e Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 6 Jun 2025 16:36:58 +0700 Subject: [PATCH 17/18] fix select field --- src/controllers/AssignController.ts | 8 ++++++++ src/controllers/EvaluateResultController.ts | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index b7d7db1..3776d2b 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -631,6 +631,10 @@ export class AssignController extends Controller { "positionLineName", "orgRootName", "organization", + "orgChild1Name", + "orgChild2Name", + "orgChild3Name", + "orgChild4Name", ], where: { personal_id: assign.personal_id, @@ -884,6 +888,10 @@ export class AssignController extends Controller { "positionLineName", "orgRootName", "organization", + "orgChild1Name", + "orgChild2Name", + "orgChild3Name", + "orgChild4Name", ], where: { personal_id: assign.personal_id, diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index 5765c01..23b5c68 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -277,6 +277,10 @@ export class EvaluateResultController extends Controller { "positionLevelName", "organization", "orgRootName", + "orgChild1Name", + "orgChild2Name", + "orgChild3Name", + "orgChild4Name", ], where: { personal_id: assign.personal_id }, }); From b99ce45f8662246b2172c726348e7a2ea573b13e Mon Sep 17 00:00:00 2001 From: kittapath-Jool Date: Thu, 19 Jun 2025 12:55:10 +0700 Subject: [PATCH 18/18] =?UTF-8?q?=E0=B8=AA=E0=B8=B4=E0=B8=97=E0=B8=98?= =?UTF-8?q?=E0=B8=B4=E0=B9=8C=20=E0=B8=97=E0=B8=94=E0=B8=A5=E0=B8=AD?= =?UTF-8?q?=E0=B8=87=E0=B8=87=E0=B8=B2=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/PersonalController.ts | 251 ++++++++++++++++++++------ 1 file changed, 194 insertions(+), 57 deletions(-) diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 09d9c18..95b580d 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -21,13 +21,14 @@ import { Personal, PostPersonal } from "../entities/Personal"; import permission from "../interfaces/permission"; import { Assign } from "../entities/Assign"; import { Brackets } from "typeorm"; +import CallAPI from "../interfaces/call-api"; @Route("api/v1/probation/personal") @Tags("Personal") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", + "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง" ) export class PersonalController extends Controller { private personalRepository = AppDataSource.getRepository(Personal); @@ -40,7 +41,10 @@ export class PersonalController extends Controller { * */ @Post("add") - async AddPersonal(@Body() requestBody: PostPersonal, @Request() request: RequestWithUser) { + async AddPersonal( + @Body() requestBody: PostPersonal, + @Request() request: RequestWithUser + ) { try { await new permission().PermissionCreate(request, "SYS_PROBATION"); @@ -50,19 +54,31 @@ export class PersonalController extends Controller { if (checkPersonal > 0) { throw new HttpError( HttpStatusCode.BAD_REQUEST, - "ผู้ทดลองปฏิบัติหน้าที่ราชการนี้มีอยู่แล้ว", + "ผู้ทดลองปฏิบัติหน้าที่ราชการนี้มีอยู่แล้ว" ); } - let organization = await (requestBody.orgChild4Name ? requestBody.orgChild4Name + "\n" : ""); - organization += await (requestBody.orgChild3Name ? requestBody.orgChild3Name + "\n" : ""); - organization += await (requestBody.orgChild2Name ? requestBody.orgChild2Name + "\n" : ""); - organization += await (requestBody.orgChild1Name ? requestBody.orgChild1Name + "\n" : ""); - organization += await (requestBody.orgRootName ? requestBody.orgRootName : ""); + let organization = await (requestBody.orgChild4Name + ? requestBody.orgChild4Name + "\n" + : ""); + organization += await (requestBody.orgChild3Name + ? requestBody.orgChild3Name + "\n" + : ""); + organization += await (requestBody.orgChild2Name + ? requestBody.orgChild2Name + "\n" + : ""); + organization += await (requestBody.orgChild1Name + ? requestBody.orgChild1Name + "\n" + : ""); + 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; @@ -74,8 +90,12 @@ 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 : ""; @@ -94,7 +114,8 @@ export class PersonalController extends Controller { personalData.child3Dna = requestBody.orgChild3Dna; personalData.child4Dna = requestBody.orgChild4Dna; - const getFieldValue = (field: string | null | undefined): string => field ?? ""; + const getFieldValue = (field: string | null | undefined): string => + field ?? ""; personalData.orgChild1Name = getFieldValue(requestBody.orgChild1Name); personalData.orgChild2Name = getFieldValue(requestBody.orgChild2Name); personalData.orgChild3Name = getFieldValue(requestBody.orgChild3Name); @@ -110,7 +131,11 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); + } else + throw new HttpError( + HttpStatusCode.INTERNAL_SERVER_ERROR, + error.message + ); } } @@ -126,42 +151,122 @@ export class PersonalController extends Controller { @Query() keyword: string = "", @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, - @Request() request: RequestWithUser, + @Request() request: RequestWithUser ) { try { - await new permission().PermissionList(request, "SYS_PROBATION"); - const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION"); + // await new permission().PermissionList(request, "SYS_PROBATION"); + // const _data = await new permission().PermissionOrgList(request, "SYS_PROBATION"); - const conditions: any = {}; - if (status) { - conditions.probation_status = status; - } + let _data = await new permission().PermissionOrgList( + request, + "SYS_DEV_PROJECT" + ); + await new CallAPI() + .PostData(request, "/org/finddna", _data) + .then((x) => { + _data = x; + }) + .catch((x) => {}); - if (_data.root != undefined && _data.root != null && _data.root[0] != null) { - conditions.root = _data.root; - } + // const conditions: any = {}; + // if (status) { + // conditions.probation_status = status; + // } - if (_data.child1 != undefined && _data.child1 != null && _data.child1[0] != null) { - conditions.child1 = _data.child1; - } + // if ( + // _data.root != undefined && + // _data.root != null && + // _data.root[0] != null + // ) { + // conditions.root = _data.root; + // } - if (_data.child2 != undefined && _data.child2 != null && _data.child2[0] != null) { - conditions.child2 = _data.child2; - } + // if ( + // _data.child1 != undefined && + // _data.child1 != null && + // _data.child1[0] != null + // ) { + // conditions.child1 = _data.child1; + // } - if (_data.child3 != undefined && _data.child3 != null && _data.child3[0] != null) { - conditions.child3 = _data.child3; - } + // if ( + // _data.child2 != undefined && + // _data.child2 != null && + // _data.child2[0] != null + // ) { + // conditions.child2 = _data.child2; + // } - if (_data.child4 != undefined && _data.child4 != null && _data.child4[0] != null) { - conditions.child4 = _data.child4; - } + // if ( + // _data.child3 != undefined && + // _data.child3 != null && + // _data.child3[0] != null + // ) { + // conditions.child3 = _data.child3; + // } + + // if ( + // _data.child4 != undefined && + // _data.child4 != null && + // _data.child4[0] != null + // ) { + // conditions.child4 = _data.child4; + // } const searchKeyword = await (keyword ? keyword.trim() : null); const [lists, total] = await AppDataSource.getRepository(Personal) .createQueryBuilder("personal") - .where(conditions) + .andWhere( + _data.root != undefined && _data.root != null + ? _data.root[0] != null + ? `personal.rootDna IN (:...root)` + : `personal.rootDna is null` + : "1=1", + { + root: _data.root, + } + ) + .andWhere( + _data.child1 != undefined && _data.child1 != null + ? _data.child1[0] != null + ? `personal.child1Dna IN (:...child1)` + : `personal.child1Dna is null` + : "1=1", + { + child1: _data.child1, + } + ) + .andWhere( + _data.child2 != undefined && _data.child2 != null + ? _data.child2[0] != null + ? `personal.child2Dna IN (:...child2)` + : `personal.child2Dna is null` + : "1=1", + { + child2: _data.child2, + } + ) + .andWhere( + _data.child3 != undefined && _data.child3 != null + ? _data.child3[0] != null + ? `personal.child3Dna IN (:...child3)` + : `personal.child3Dna is null` + : "1=1", + { + child3: _data.child3, + } + ) + .andWhere( + _data.child4 != undefined && _data.child4 != null + ? _data.child4[0] != null + ? `personal.child4Dna IN (:...child4)` + : `personal.child4Dna is null` + : "1=1", + { + child4: _data.child4, + } + ) .andWhere( new Brackets((qb) => { qb.orWhere( @@ -170,21 +275,33 @@ export class PersonalController extends Controller { : "1=1", { keyword: `%${searchKeyword}%`, - }, + } ); - qb.orWhere(searchKeyword ? `positionName like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }); - qb.orWhere(searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }); - qb.orWhere(searchKeyword ? `organization like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }); - qb.orWhere(searchKeyword ? `order_number like '%${keyword}%'` : "1=1", { - keyword: `%${searchKeyword}%`, - }); - }), + qb.orWhere( + searchKeyword ? `positionName like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `positionLevelName like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `organization like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + qb.orWhere( + searchKeyword ? `order_number like '%${keyword}%'` : "1=1", + { + keyword: `%${searchKeyword}%`, + } + ); + }) ) .orderBy("updatedAt", "DESC") .skip((page - 1) * pageSize) @@ -192,7 +309,10 @@ export class PersonalController extends Controller { .getManyAndCount(); if (!lists) { - throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, "ไม่สามารถแสดงข้อมูลได้"); + throw new HttpError( + HttpStatusCode.INTERNAL_SERVER_ERROR, + "ไม่สามารถแสดงข้อมูลได้" + ); } let result: any = []; @@ -205,7 +325,8 @@ export class PersonalController extends Controller { await result.push({ personal_id: lists[i].personal_id, ordering: i + 1, - name: lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, + name: + lists[i].prefixName + lists[i].firstName + " " + lists[i].lastName, prefixName: lists[i].prefixName, firstName: lists[i].firstName, lastName: lists[i].lastName, @@ -250,7 +371,11 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); + } else + throw new HttpError( + HttpStatusCode.INTERNAL_SERVER_ERROR, + error.message + ); } } @@ -261,10 +386,18 @@ export class PersonalController extends Controller { * */ @Get("") - async GetPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { + async GetPersonal( + @Request() request: RequestWithUser, + @Query() personal_id: string + ) { try { - let _workflow = await new permission().Workflow(request, personal_id, "SYS_PROBATION"); - if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION"); + let _workflow = await new permission().Workflow( + request, + personal_id, + "SYS_PROBATION" + ); + if (_workflow == false) + await new permission().PermissionGet(request, "SYS_PROBATION"); const person = await this.personalRepository.findOne({ where: { personal_id: personal_id }, }); @@ -293,7 +426,11 @@ export class PersonalController extends Controller { } catch (error: any) { if (error instanceof HttpError) { throw error; - } else throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, error.message); + } else + throw new HttpError( + HttpStatusCode.INTERNAL_SERVER_ERROR, + error.message + ); } } }