import { Controller, Get, Post, Put, Delete, Route, Security, Tags, Body, Path, Request, Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import { Brackets, Not } from "typeorm"; import HttpSuccess from "../interfaces/http-success"; import HttpError from "../interfaces/http-error"; import HttpStatusCode from "../interfaces/http-status"; import { Development } from "../entities/Development"; import { CreateDevelopmentHistory, DevelopmentHistory, UpdateDevelopmentHistory, } from "../entities/DevelopmentHistory"; import { PosType } from "../entities/PosType"; import { PosLevel } from "../entities/PosLevel"; @Route("api/v1/development/scholarship") @Tags("DevelopmentScholarship") @Security("bearerAuth") export class DevelopmentScholarshipController extends Controller { private developmentHistoryRepository = AppDataSource.getRepository(DevelopmentHistory); private developmentRepository = AppDataSource.getRepository(Development); private posTypeRepository = AppDataSource.getRepository(PosType); private posLevelRepository = AppDataSource.getRepository(PosLevel); // /** // * API เพิ่มประวัติการฝึกอบรม/ดูงาน // * // * @summary DEV_006 - เพิ่มประวัติการฝึกอบรม/ดูงาน#6 // * // */ // @Post() // async CreateDevelopmentHistory( // @Body() requestBody: CreateDevelopmentHistory, // @Request() request: { user: Record }, // ) { // const type = "OFFICER"; // const chk_name = await this.developmentHistoryRepository.find({ // where: { // citizenId: requestBody.citizenId, // developmentId: requestBody.developmentId, // type: type, // }, // }); // if (chk_name.length > 0) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ประวัติการฝึกอบรม/ดูงาน มีอยู่ในระบบแล้ว"); // } // const checkId = await this.developmentRepository.findOne({ // where: { id: requestBody.developmentId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรม"); // } // if (requestBody.posTypeId != null) { // const checkId = await this.posTypeRepository.findOne({ // where: { id: requestBody.posTypeId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่ง"); // } // } // if (requestBody.posLevelId != null) { // const checkId = await this.posLevelRepository.findOne({ // where: { id: requestBody.posLevelId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลระดับตำแหน่ง"); // } // } // const development = Object.assign(new DevelopmentHistory(), requestBody); // development.type = type; // development.createdUserId = request.user.sub; // development.createdFullName = request.user.name; // development.lastUpdateUserId = request.user.sub; // development.lastUpdateFullName = request.user.name; // await this.developmentHistoryRepository.save(development); // return new HttpSuccess(development.id); // } // /** // * API แก้ไขประวัติการฝึกอบรม/ดูงาน // * // * @summary DEV_007 - แก้ไขประวัติการฝึกอบรม/ดูงาน #7 // * // * @param {string} id Id โครงการ // */ // @Put("{id}") // async UpdateDevelopmentHistory( // @Path() id: string, // @Body() requestBody: UpdateDevelopmentHistory, // @Request() request: { user: Record }, // ) { // const type = "OFFICER"; // const development = await this.developmentHistoryRepository.findOne({ // where: { id: id, type: type }, // }); // if (!development) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); // } // const chk_name = await this.developmentHistoryRepository.find({ // where: { // citizenId: requestBody.citizenId, // developmentId: requestBody.developmentId, // type: type, // id: Not(id), // }, // }); // if (chk_name.length > 0) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ประวัติการฝึกอบรม/ดูงาน มีอยู่ในระบบแล้ว"); // } // const checkId = await this.developmentRepository.findOne({ // where: { id: requestBody.developmentId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรม"); // } // if (requestBody.posTypeId != null) { // const checkId = await this.posTypeRepository.findOne({ // where: { id: requestBody.posTypeId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่ง"); // } // } // if (requestBody.posLevelId != null) { // const checkId = await this.posLevelRepository.findOne({ // where: { id: requestBody.posLevelId }, // }); // if (!checkId) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลระดับตำแหน่ง"); // } // } // Object.assign(development, requestBody); // development.type = type; // development.lastUpdateUserId = request.user.sub; // development.lastUpdateFullName = request.user.name; // await this.developmentHistoryRepository.save(development); // return new HttpSuccess(development.id); // } // /** // * API ลบประวัติการฝึกอบรม/ดูงาน // * // * @summary DEV_008 - ลบประวัติการฝึกอบรม/ดูงาน #8 // * // * @param {string} id Id โครงการ // */ // @Delete("{id}") // async DeleteDevelopmentHistory(@Path() id: string) { // const type = "OFFICER"; // const development = await this.developmentHistoryRepository.findOne({ // where: { id: id, type: type }, // }); // if (!development) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); // } // await this.developmentHistoryRepository.remove(development); // return new HttpSuccess(); // } // /** // * API รายการประวัติการฝึกอบรม/ดูงาน // * // * @summary DEV_009 - รายการประวัติการฝึกอบรม/ดูงาน #9 // * // */ // @Get() // async GetDevelopmentHistoryLists( // @Query("page") page: number = 1, // @Query("pageSize") pageSize: number = 10, // @Query("keyword") keyword?: string, // @Query("year") year?: number, // ) { // const type = "OFFICER"; // const [development, total] = await AppDataSource.getRepository(DevelopmentHistory) // .createQueryBuilder("developmentHistory") // .leftJoinAndSelect("developmentHistory.development", "development") // .leftJoinAndSelect("developmentHistory.posLevel", "posLevel") // .leftJoinAndSelect("developmentHistory.posType", "posType") // .andWhere(year != 0 && year != null && year != undefined ? "development.year = :year" : "1=1", { year: year }) // .andWhere("developmentHistory.type = :type", { type: type }) // .andWhere( // new Brackets((qb) => { // qb.where( // keyword != null && keyword != "" // ? "developmentHistory.prefix LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "developmentHistory.firstName LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "developmentHistory.lastName LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "developmentHistory.position LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "developmentHistory.position LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "development.projectName LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "posType.posTypeName LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ) // .orWhere( // keyword != null && keyword != "" // ? "posLevel.posLevelName LIKE :keyword" // : "1=1", // { // keyword: `%${keyword}%`, // }, // ); // }), // ) // .orderBy("developmentHistory.createdAt", "DESC") // .skip((page - 1) * pageSize) // .take(pageSize) // .getManyAndCount(); // const formattedData = development.map(item => ({ // id: item.id, // citizenId: item.citizenId, // fullName: item.prefix+item.firstName+" "+item.lastName, // position: item.position, // posType: item.posType ? item.posType.posTypeName : null, // posLevel: item.posLevel ? item.posLevel.posLevelName : null, // posExecutive: item.posExecutive, // projectName: item.development.projectName, // })); // return new HttpSuccess({ data: formattedData, total }); // } // /** // * API รายละเอียดประวัติการฝึกอบรม/ดูงาน // * // * @summary DEV_010 - รายละเอียดประวัติการฝึกอบรม/ดูงาน #10 // * // * @param {string} id Id โครงการ // */ // @Get("{id}") // async GetDevelopemtHistoryById(@Path() id: string) { // const type = "OFFICER"; // const getDevelopment = await this.developmentHistoryRepository.findOne({ // relations: ["development"], // where: { id: id, type: type }, // }); // if (!getDevelopment) { // throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); // } // const formattedData = { // rank: getDevelopment.rank ? getDevelopment.rank : null, // prefix: getDevelopment.prefix ? getDevelopment.prefix : null, // firstName: getDevelopment.firstName ? getDevelopment.firstName : null, // lastName: getDevelopment.lastName ? getDevelopment.lastName : null, // citizenId: getDevelopment.citizenId ? getDevelopment.citizenId : null, // position: getDevelopment.position ? getDevelopment.position : null, // posLevelId: getDevelopment.posLevelId ? getDevelopment.posLevelId : null, // posTypeId: getDevelopment.posTypeId ? getDevelopment.posTypeId : null, // developmentId: getDevelopment.developmentId ? getDevelopment.developmentId : null, // order: getDevelopment.order ? getDevelopment.order : null, // dateOrder: getDevelopment.dateOrder ? getDevelopment.dateOrder : null, // year: getDevelopment.development.year ? getDevelopment.development.year : null, // projectName: getDevelopment.development.projectName ? getDevelopment.development.projectName : null, // dateStart: getDevelopment.development.dateStart ? getDevelopment.development.dateStart : null, // dateEnd: getDevelopment.development.dateEnd ? getDevelopment.development.dateEnd : null, // totalDate: getDevelopment.development.totalDate ? getDevelopment.development.totalDate : null, // addressAcademic: getDevelopment.development.addressAcademic ? getDevelopment.development.addressAcademic : null, // topicAcademic: getDevelopment.development.topicAcademic ? getDevelopment.development.topicAcademic : null, // dateStudyStart: getDevelopment.development.dateStudyStart ? getDevelopment.development.dateStudyStart : null, // dateStudyEnd: getDevelopment.development.dateStudyEnd ? getDevelopment.development.dateStudyEnd : null, // org: null, // }; // return new HttpSuccess(formattedData); // } }