import { Controller, Route, Security, Tags, Path, Request, SuccessResponse, Response, Get, Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import HttpSuccess from "../interfaces/http-success"; import HttpStatusCode from "../interfaces/http-status"; import HttpError from "../interfaces/http-error"; import { RequestWithUser } from "../middlewares/user"; import { Knowledge, TypeKnowledge } from "../entities/Knowledge"; import { Skill, TypeSkill } from "../entities/Skill"; import { MapKnowledgeSkill } from "../entities/MapKnowledgeSkill"; import { Personal } from "../entities/Personal"; import { Law } from "../entities/Law"; import { Assign } from "../entities/Assign"; @Route("api/v1/probation/data-options") @Tags("Data Options") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class DataOptionController extends Controller { private personalRepository = AppDataSource.getRepository(Personal); private knowledgeRepository = AppDataSource.getRepository(Knowledge); private mapKnowledgeSkillRepository = AppDataSource.getRepository(MapKnowledgeSkill); private skillRepository = AppDataSource.getRepository(Skill); private lawRepository = AppDataSource.getRepository(Law); private assignRepository = AppDataSource.getRepository(Assign); /** * API list รายการความรู้ * * @summary options ความรู้ * */ @Get("knowledge") async GetKnowledge(@Query() personal_id: string, @Request() request: RequestWithUser) { const person = await this.personalRepository.findOne({ where: { personal_id }, }); if (!person) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล"); } let result = await this.mapKnowledgeSkillRepository.findOne({ where: { positionName: person.positionName, positionLevelName: person.positionLevelName, active: 1, }, }); if (!result) { // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ result = await this.mapKnowledgeSkillRepository.findOne({ where: { positionLevelName: person.positionLevelName, active: 1, }, }); } if (!result) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลความรู้ที่ตรงกับตำแหน่ง"); } const knowledges = await this.knowledgeRepository.find({ where: { type: TypeKnowledge.PERFORMANCE, active: 1 }, }); const knowledge = knowledges.map((knowledge) => ({ id: knowledge.id, title: knowledge.title, description: result.knowlage_performance_level == 1 ? knowledge.level1 : result.knowlage_performance_level == 2 ? knowledge.level2 : result.knowlage_performance_level == 3 ? knowledge.level3 : result.knowlage_performance_level == 4 ? knowledge.level4 : knowledge.level5, level: result.knowlage_performance_level, })); return new HttpSuccess(knowledge); } /** * API ข้อมูลทักษะ * * @summary options ทักษะ * */ @Get("skill") async GetSkill(@Query() personal_id: string, @Request() request: RequestWithUser) { const person = await this.personalRepository.findOne({ where: { personal_id }, }); if (!person) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } let result = await this.mapKnowledgeSkillRepository.findOne({ select: [ "skill_computer_level", "skill_english_level", "skill_information_level", "skill_resourse_level", ], where: { positionName: person.positionName, positionLevelName: person.positionLevelName, active: 1, }, }); if (!result) { // ถ้าตำแหน่งไม่ตรงหาจากระดับตำแหน่งแทนเพื่อให้ฟอร์มสามารถกรอกต่อได้ result = await this.mapKnowledgeSkillRepository.findOne({ select: [ "skill_computer_level", "skill_english_level", "skill_information_level", "skill_resourse_level", ], where: { positionLevelName: person.positionLevelName, active: 1, }, }); } if (!result) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะที่ตรงกับตำแหน่ง"); } const computerData = await this.skillRepository.findOne({ where: { type: TypeSkill.COMPUTER, active: 1 }, }); if (!computerData) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะคอมพิวเตอร์"); } const computer = await { id: computerData.id, title: computerData.title, level_description: result.skill_computer_level == 1 ? computerData.level1 : result.skill_computer_level == 2 ? computerData.level2 : result.skill_computer_level == 3 ? computerData.level3 : result.skill_computer_level == 4 ? computerData.level4 : computerData.level5, level: result.skill_computer_level, }; const englishData = await this.skillRepository.findOne({ where: { type: TypeSkill.ENG, active: 1 }, }); if (!englishData) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทักษะภาษาอังกฤษ"); } const english = await { id: englishData.id, title: englishData.title, level_description: result.skill_english_level == 1 ? englishData.level1 : result.skill_english_level == 2 ? englishData.level2 : result.skill_english_level == 3 ? englishData.level3 : result.skill_english_level == 4 ? englishData.level4 : englishData.level5, level: result.skill_english_level, }; const informationData = await this.skillRepository.findOne({ where: { type: TypeSkill.INFORMATION, active: 1 }, }); if (!informationData) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const information = await { id: informationData.id, title: informationData.title, level_description: result.skill_information_level == 1 ? informationData.level1 : result.skill_information_level == 2 ? informationData.level2 : result.skill_information_level == 3 ? informationData.level3 : result.skill_information_level == 4 ? informationData.level4 : informationData.level5, level: result.skill_information_level, }; const resourseData = await this.skillRepository.findOne({ where: { type: TypeSkill.RESOURSE, active: 1 }, }); if (!resourseData) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const resourse = await { id: resourseData.id, title: resourseData.title, level_description: result.skill_resourse_level == 1 ? resourseData.level1 : result.skill_resourse_level == 2 ? resourseData.level2 : result.skill_resourse_level == 3 ? resourseData.level3 : result.skill_resourse_level == 4 ? resourseData.level4 : resourseData.level5, level: result.skill_resourse_level, }; return new HttpSuccess({ computer, english, information, resourse, }); } /** * API list รายการกฎหมาย * * @summary options กฎหมาย * */ @Get("law") async GetLaw(@Query() personal_id: string, @Request() request: RequestWithUser) { const results = await this.lawRepository.find({ select: ["id", "parent_id", "description", "status_select"], where: { active: 1, }, }); if (!results) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const result = await results.map((v) => ({ ...v, checked: 0, })); return new HttpSuccess(result); } /** * API ดึงข้อมูลจำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง * * @summary จำนวนครั้งแบบมอบหมายงานและข้อมูลผู้ทดลอง * */ @Get("new-assign") async NewAssign(@Query() personal_id: string, @Request() request: RequestWithUser) { const person = await this.personalRepository.findOne({ select: [ "personal_id", "prefixName", "firstName", "lastName", "posNo", "positionName", "positionLevelName", "positionLineName", "isProbation", "orgRootName", "organization", "createdAt", "updatedAt", ], where: { personal_id }, }); if (!person) { return new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล"); } const assign = await this.assignRepository.count({ where: { personal_id, }, }); const responsePerson = { id: person.personal_id, ...person, }; return new HttpSuccess({ person: responsePerson, assign_no: assign + 1, assign_month: 6, }); } }