From 168cfcee4606dac4586e1c34104f47bd0291a316 Mon Sep 17 00:00:00 2001 From: "DESKTOP-2S5P7D1\\Windows 10" Date: Tue, 22 Oct 2024 08:21:29 +0700 Subject: [PATCH] check workflow --- src/controllers/AppointController.ts | 3 +- src/controllers/AssignController.ts | 1231 +++++---- src/controllers/DataOptionsController.ts | 3 +- src/controllers/EvaluateChairmanController.ts | 3 +- src/controllers/EvaluateController.ts | 3 +- src/controllers/EvaluateRecordController.ts | 2218 ++++++++--------- src/controllers/EvaluateResultController.ts | 3 +- src/controllers/PersonalController.ts | 3 +- src/interfaces/permission.ts | 36 +- 9 files changed, 1667 insertions(+), 1836 deletions(-) diff --git a/src/controllers/AppointController.ts b/src/controllers/AppointController.ts index 7b47b87..4304711 100644 --- a/src/controllers/AppointController.ts +++ b/src/controllers/AppointController.ts @@ -80,7 +80,8 @@ export class AppointController extends Controller { */ @Get("{id}") async GetById(@Request() request: RequestWithUser, @Path() id: string) { - 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"], diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index 5d92590..8cb4540 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -1,717 +1,650 @@ -import { - Controller, - Post, - Put, - 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 { 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 { AssignJob, CreateAssignJob } from "../entities/AssignJob"; -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 { - AssignCompetencyGroup, - CreateAssignCompetencyGroup, -} from "../entities/AssignCompetencyGroup"; -import { AssignOutput, CreateAssignOutput } from "../entities/AssignOutput"; -import { Law } from "../entities/Law"; -import CallAPI from "../interfaces/call-api"; +import { Controller, Post, Put, 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 { 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 { AssignJob, CreateAssignJob } from "../entities/AssignJob" +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 { AssignCompetencyGroup, CreateAssignCompetencyGroup } from "../entities/AssignCompetencyGroup" +import { AssignOutput, CreateAssignOutput } from "../entities/AssignOutput" +import { Law } from "../entities/Law" +import CallAPI from "../interfaces/call-api" @Route("api/v1/probation/assign") @Tags("ฟอร์มมอบหมายงาน") @Security("bearerAuth") -@Response( - HttpStatusCode.INTERNAL_SERVER_ERROR, - "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", -) +@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 assignJobRepository = AppDataSource.getRepository(AssignJob); - 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 assignOutputRepository = AppDataSource.getRepository(AssignOutput); - private lawsRepository = AppDataSource.getRepository(Law); + private assignRepository = AppDataSource.getRepository(Assign) + private personalRepository = AppDataSource.getRepository(Personal) + private assignDirectorRepository = AppDataSource.getRepository(AssignDirector) + private assignJobRepository = AppDataSource.getRepository(AssignJob) + 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 assignOutputRepository = AppDataSource.getRepository(AssignOutput) + private lawsRepository = AppDataSource.getRepository(Law) - /** - * API เพิ่มข้อมูลการมอบหมายงาน - * - * @summary เพิ่มข้อมูลการมอบหมายงาน - * - */ - @Post("") - async AddAssign(@Request() request: RequestWithUser, @Body() requestBody: CreateAssign) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); - const person = await this.personalRepository.findOne({ - where: { - personal_id: requestBody.personalId, - }, - }); + /** + * API เพิ่มข้อมูลการมอบหมายงาน + * + * @summary เพิ่มข้อมูลการมอบหมายงาน + * + */ + @Post("") + async AddAssign(@Request() request: RequestWithUser, @Body() requestBody: CreateAssign) { + await new permission().PermissionUpdate(request, "SYS_PROBATION") + const person = await this.personalRepository.findOne({ + where: { + personal_id: requestBody.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 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, - }; - const before = null; - const assign = await this.assignRepository.save(data, { data: request }); - setLogDataDiff(request, { before, after: data }); + 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, + } + 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 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 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 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 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 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 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 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 }); + 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(); - } + return new HttpSuccess() + } - /** - * API แก้ไขข้อมูลการมอบหมายงาน - * - * @summary แก้ไขแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ - * - */ - @Put("") - async EditAssign( - @Query() assign_id: string, - @Request() request: RequestWithUser, - @Body() requestBody: CreateAssign, - ) { - await new permission().PermissionUpdate(request, "SYS_PROBATION"); + /** + * API แก้ไขข้อมูลการมอบหมายงาน + * + * @summary แก้ไขแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ + * + */ + @Put("") + async EditAssign(@Query() assign_id: string, @Request() request: RequestWithUser, @Body() requestBody: CreateAssign) { + 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, - }, - }); + 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 data: any = { - ...requestBody, - id: assign_id, - updateUserId: request.user.sub, - updateFullName: request.user.name, - }; + const data: any = { + ...requestBody, + id: assign_id, + updateUserId: request.user.sub, + updateFullName: request.user.name, + } - 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.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.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.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.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.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.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.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.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 }); + 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); - }); - }); + // #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); - }); - }); + // แจ้งผู้บังคับบัญชา และคณะกรรมการเข้ามาประเมินทุก 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); - }); - }); + // แจ้งประธาน 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(); - } + return new HttpSuccess() + } - /** - * API รายการข้อมูลการมอบหมายงาน - * - * @summary รายการการมอบหมายงาน - * - */ - @Get("assign-list") - async ListPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { - await new permission().PermissionGet(request, "SYS_PROBATION"); - const lists = await this.assignRepository.find({ - select: ["id", "round_no", "date_start", "date_finish"], - where: { personal_id }, - order: { round_no: "ASC" }, - }); + /** + * API รายการข้อมูลการมอบหมายงาน + * + * @summary รายการการมอบหมายงาน + * + */ + @Get("assign-list") + async ListPersonal(@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" }, + }) - 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) + } - /** - * API ดึงข้อมูลแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ - * - * @summary ดึงข้อมูลแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ - * - */ - @Get("") - async GetAssign(@Query() assign_id: string, @Request() request: RequestWithUser) { - await new permission().PermissionGet(request, "SYS_PROBATION"); + /** + * API ดึงข้อมูลแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ + * + * @summary ดึงข้อมูลแบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ + * + */ + @Get("") + async GetAssign(@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({ - select: [ - "id", - "personal_id", - "appointId", - "round_no", - "date_start", - "date_finish", - "other_desc", - "other4_desc", - "other5_no1_desc", - "experimenter_dated", - "active", - "createdAt", - "updatedAt", - ], - where: { id: assign_id }, - }); + 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", + ], + where: { id: assign_id }, + }) - if (!assign) { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน"); - } + 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, - }, - }); + 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, "ไม่พบข้อมูลบุคคล"); - } + if (!profileData) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล") + } - const profile = { - ...profileData, - name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, - Position: profileData.positionName, - Department: "-", - OrganizationOrganization: profileData.orgRootName, - Oc: profileData.organization, - }; + const profile = { + ...profileData, + name: `${profileData.prefixName}${profileData.firstName} ${profileData.lastName}`, + Position: profileData.positionName, + Department: "-", + OrganizationOrganization: profileData.orgRootName, + Oc: profileData.organization, + } - const jobs = await this.assignJobRepository.find({ - select: ["id", "activity_desc", "goal_desc"], - where: { assign_id }, - }); + 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 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 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, - }); + const laws = await Promise.all( + lawData.map(async x => { + const assignLaw = await this.assignLawRepository.countBy({ + assign_id: assign_id, + law_id: x.id, + }) - return { - id: x.id, - selected: assignLaw > 0 ? 1 : 0, - description: x.description, - status_select: x.status_select, - }; - }), - ); + return { + id: x.id, + selected: assignLaw > 0 ? 1 : 0, + description: x.description, + status_select: x.status_select, + } + }) + ) - const skillsData = await this.assignSkillRepository.find({ - relations: ["skill"], - where: { assign_id }, - }); + 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 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 }, - }); + const competencyData = await this.assignCompetencyRepository.find({ + select: ["competency_id", "competency_level", "competency_name", "competency_description"], + 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 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({ - select: [ - "competency_group_id", - "competency_group_level", - "competency_group_name", - "competency_group_description", - ], - where: { assign_id }, - }); - const competency_groups = await competencyGroupData.map((x) => ({ - id: x.competency_group_id, - level: x.competency_group_level, - name: x.competency_group_name, - description: x.competency_group_description, - })); + const competencyGroupData = await this.assignCompetencyGroupRepository.find({ + select: ["competency_group_id", "competency_group_level", "competency_group_name", "competency_group_description"], + where: { assign_id }, + }) + const competency_groups = await competencyGroupData.map(x => ({ + id: x.competency_group_id, + level: x.competency_group_level, + 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 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" }, - }); + 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.posType}: ${e.posLevel})` : ""), - Position: e.position, // report - }); - } - } + 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.posType}: ${e.posLevel})` : ""), + Position: e.position, // 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.posType}: ${commanderData.posLevel})` - : ""), - Position: commanderData.position, // report - } - : null); + 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.posType}: ${commanderData.posLevel})` : ""), + Position: commanderData.position, // 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.posType}: ${chairmanData.posLevel})` - : ""), - Position: chairmanData.position, // 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.posType}: ${chairmanData.posLevel})` : ""), + Position: chairmanData.position, // report + } + : null) - return new HttpSuccess({ - assign, - profile, - jobs, - knowledges, - laws, - skills, - competencys, - competency_groups, - outputs, - mentors, - commander, - chairman, - }); - } + return new HttpSuccess({ + assign, + profile, + jobs, + knowledges, + laws, + skills, + competencys, + competency_groups, + outputs, + mentors, + commander, + chairman, + }) + } } diff --git a/src/controllers/DataOptionsController.ts b/src/controllers/DataOptionsController.ts index 14969ee..cd44663 100644 --- a/src/controllers/DataOptionsController.ts +++ b/src/controllers/DataOptionsController.ts @@ -262,7 +262,8 @@ export class DataOptionController extends Controller { */ @Get("new-assign") async NewAssign(@Query() personal_id: string, @Request() request: RequestWithUser) { - 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: [ diff --git a/src/controllers/EvaluateChairmanController.ts b/src/controllers/EvaluateChairmanController.ts index a7d1812..627f97c 100644 --- a/src/controllers/EvaluateChairmanController.ts +++ b/src/controllers/EvaluateChairmanController.ts @@ -29,7 +29,8 @@ export class EvaluateChairmanController extends Controller { */ @Get("create") async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { - 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"], diff --git a/src/controllers/EvaluateController.ts b/src/controllers/EvaluateController.ts index b08d60f..9040e27 100644 --- a/src/controllers/EvaluateController.ts +++ b/src/controllers/EvaluateController.ts @@ -29,7 +29,8 @@ export class EvaluateController extends Controller { */ @Get("create") async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { - 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"], diff --git a/src/controllers/EvaluateRecordController.ts b/src/controllers/EvaluateRecordController.ts index 33f1f81..9ac9716 100644 --- a/src/controllers/EvaluateRecordController.ts +++ b/src/controllers/EvaluateRecordController.ts @@ -1,1166 +1,1062 @@ -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) { - 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.posType}: ${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.posType}: ${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) { - 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.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)); - - 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.posType}: ${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) { + 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.posType}: ${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.posType}: ${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.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)) + + 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.posType}: ${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() + } } diff --git a/src/controllers/EvaluateResultController.ts b/src/controllers/EvaluateResultController.ts index a6e23b5..a4e0771 100644 --- a/src/controllers/EvaluateResultController.ts +++ b/src/controllers/EvaluateResultController.ts @@ -32,7 +32,8 @@ export class EvaluateResultController extends Controller { */ @Get("create") async CreateEvaluate(@Query() assign_id: string, @Request() request: RequestWithUser) { - 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"], diff --git a/src/controllers/PersonalController.ts b/src/controllers/PersonalController.ts index 21c015c..8d9ea64 100644 --- a/src/controllers/PersonalController.ts +++ b/src/controllers/PersonalController.ts @@ -136,7 +136,8 @@ export class PersonalController extends Controller { */ @Get("") async GetPersonal(@Request() request: RequestWithUser, @Query() personal_id: string) { - 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 }, }) diff --git a/src/interfaces/permission.ts b/src/interfaces/permission.ts index b0f536d..a04c877 100644 --- a/src/interfaces/permission.ts +++ b/src/interfaces/permission.ts @@ -46,16 +46,6 @@ class CheckAuth { .GetData(req, `/org/permission/org/${system}/${action}`) .then(async x => { let privilege = x.privilege - // if (action.trim().toLocaleUpperCase() == "CREATE") - // privilege = await this.PermissionCreate(req, system); - // if (action.trim().toLocaleUpperCase() == "DELETE") - // privilege = await this.PermissionDelete(req, system); - // if (action.trim().toLocaleUpperCase() == "GET") - // privilege = await this.PermissionGet(req, system); - // if (action.trim().toLocaleUpperCase() == "LIST") - // privilege = await this.PermissionList(req, system); - // if (action.trim().toLocaleUpperCase() == "UPDATE") - // privilege = await this.PermissionUpdate(req, system); let data: any = { root: [null], @@ -132,16 +122,6 @@ class CheckAuth { .GetData(req, `/org/permission/user/${system}/${action}/${profileId}`) .then(async x => { let org = x.org - // if (action.trim().toLocaleUpperCase() == "CREATE") - // org = await this.PermissionOrgCreate(req, system); - // if (action.trim().toLocaleUpperCase() == "DELETE") - // org = await this.PermissionOrgDelete(req, system); - // if (action.trim().toLocaleUpperCase() == "GET") - // org = await this.PermissionOrgGet(req, system); - // if (action.trim().toLocaleUpperCase() == "LIST") - // org = await this.PermissionOrgList(req, system); - // if (action.trim().toLocaleUpperCase() == "UPDATE") - // org = await this.PermissionOrgUpdate(req, system); if (org.root != null) if (x.orgRootId != org.root[0]) throw "ไม่มีสิทธิ์เข้าถึงข้อมูล" if (org.child1 != null) if (x.orgChild1Id != org.child1[0]) throw "ไม่มีสิทธิ์เข้าถึงข้อมูล" @@ -159,6 +139,22 @@ class CheckAuth { } }) } + public async Workflow(req: RequestWithUser, id: string, sysName: string) { + if (req.headers.hasOwnProperty("api_key") && req.headers["api_key"] && req.headers["api_key"] == process.env.API_KEY) { + return null + } + return await new CallAPI() + .PostData(req, "/org/workflow/keycloak/isofficer", { + refId: id, + sysName: sysName, + }) + .then(x => { + return true + }) + .catch(x => { + return false + }) + } public async PermissionCreate(req: RequestWithUser, system: string) { return await this.Permission(req, system, "CREATE") }