diff --git a/src/controllers/AssignController.ts b/src/controllers/AssignController.ts index 735bf15..5d92590 100644 --- a/src/controllers/AssignController.ts +++ b/src/controllers/AssignController.ts @@ -1,634 +1,717 @@ -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) { + 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) { + await new permission().PermissionGet(request, "SYS_PROBATION"); - const assign = await this.assignRepository.findOne({ - select: ["id", "personal_id", "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/entities/Assign.ts b/src/entities/Assign.ts index ce84ab2..2ab3644 100644 --- a/src/entities/Assign.ts +++ b/src/entities/Assign.ts @@ -86,6 +86,12 @@ export class Assign extends EntityBase { }) other_desc!: string; + @Column({ + nullable: true, + comment: "Id ของการแต่งตั้งคณะกรรมการ", + }) + appointId: string; + @ManyToOne(() => Personal, (person: Personal) => person.personal_id) @JoinColumn({ name: "personal_id" }) profile: Personal; @@ -179,6 +185,7 @@ export class CreateAssign { position?: string; monthSelect?: number; other_desc?: string; + appointId?: string; assign_competency_group: CreateAssignCompetencyGroup[]; assign_competency: CreateAssignCompetency[]; diff --git a/src/migration/1729220132639-addColumn.ts b/src/migration/1729220132639-addColumn.ts new file mode 100644 index 0000000..b23ed27 --- /dev/null +++ b/src/migration/1729220132639-addColumn.ts @@ -0,0 +1,18 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddColumn1729220132639 implements MigrationInterface { + name = 'AddColumn1729220132639' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`assign\` ADD \`appointId\` varchar(255) NULL COMMENT 'Id ของการแต่งตั้งคณะกรรมการ'`); + await queryRunner.query(`ALTER TABLE \`assign\` DROP COLUMN \`other_desc\``); + await queryRunner.query(`ALTER TABLE \`assign\` ADD \`other_desc\` varchar(255) NULL COMMENT 'กฎหมายอื่นๆ'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`assign\` DROP COLUMN \`other_desc\``); + await queryRunner.query(`ALTER TABLE \`assign\` ADD \`other_desc\` varchar(45) NULL`); + await queryRunner.query(`ALTER TABLE \`assign\` DROP COLUMN \`appointId\``); + } + +}