diff --git a/src/controllers/DevelopmentHistoryController.ts b/src/controllers/DevelopmentHistoryController.ts index 7b48fc1..4a6e123 100644 --- a/src/controllers/DevelopmentHistoryController.ts +++ b/src/controllers/DevelopmentHistoryController.ts @@ -13,7 +13,7 @@ import { Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; -import { Not } from "typeorm"; +import { Brackets, Not } from "typeorm"; import HttpSuccess from "../interfaces/http-success"; import HttpError from "../interfaces/http-error"; import HttpStatusCode from "../interfaces/http-status"; @@ -189,16 +189,95 @@ export class DevelopmentOfficerHistoryController extends Controller { const type = "OFFICER"; const [development, total] = await AppDataSource.getRepository(DevelopmentHistory) .createQueryBuilder("developmentHistory") - // .andWhere(year == null ? "developmentHistory.year LIKE :year" : "1=1", { year: `${year}` }) - // .orWhere("developmentHistory.projectName LIKE :keyword", { keyword: `${keyword}` }) - // .select(["development.id", "development.projectName", "development.year"]) - // .orderBy("developmentHistory.year", "DESC") + .leftJoinAndSelect("developmentHistory.development", "development") + .leftJoinAndSelect("developmentHistory.posLevel", "posLevel") + .leftJoinAndSelect("developmentHistory.posType", "posType") + .andWhere("development.year = :year", { 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.posTypeName, + posLevel: item.posLevel.posLevelName, + projectName: item.development.projectName, + })); - return new HttpSuccess({ data: development, total }); + return new HttpSuccess({ data: formattedData, total }); } /** diff --git a/tsoa.json b/tsoa.json index 4156cdf..63f028c 100644 --- a/tsoa.json +++ b/tsoa.json @@ -33,10 +33,10 @@ "name": "Development", "description": "ชื่อโครงการ/กิจกรรม/หลักสูตร" }, { - "name": "DevelopmentOfficerHistory", "description": "ประวัติการฝึกอบรม/ดูงานข้าราชการ" + "name": "DevelopmentOfficerHistory", "description": "ประวัติการฝึกอบรม/ดูงาน ขรก." }, { - "name": "DevelopmentEmployeeHistory", "description": "ประวัติการฝึกอบรม/ดูงานลูกจ้าง" + "name": "DevelopmentEmployeeHistory", "description": "ประวัติการฝึกอบรม/ดูงานลูกจ้าง." } ] },