From e52e986d3be7bfb5a363200130d3923f78712968 Mon Sep 17 00:00:00 2001 From: Bright Date: Wed, 3 Apr 2024 20:15:58 +0700 Subject: [PATCH] =?UTF-8?q?DEV=5F009=20=E0=B8=A5=E0=B8=B9=E0=B8=81?= =?UTF-8?q?=E0=B8=88=E0=B9=89=E0=B8=B2=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevelopmentEmployeeHistoryController.ts | 91 +++++++++++++++++-- 1 file changed, 85 insertions(+), 6 deletions(-) diff --git a/src/controllers/DevelopmentEmployeeHistoryController.ts b/src/controllers/DevelopmentEmployeeHistoryController.ts index e50813e..dcdaa1f 100644 --- a/src/controllers/DevelopmentEmployeeHistoryController.ts +++ b/src/controllers/DevelopmentEmployeeHistoryController.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"; @@ -193,16 +193,95 @@ export class DevelopmentEmployeeHistoryController extends Controller { const type = "EMPLOYEE"; 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.employeePosLevel", "employeePosLevel") + .leftJoinAndSelect("developmentHistory.employeePosType", "employeePosType") + .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 != "" + ? "employeePosType.posTypeName LIKE :keyword" + : "1=1", + { + keyword: `%${keyword}%`, + }, + ) + .orWhere( + keyword != null && keyword != "" + ? "employeePosLevel.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.employeePosType.posTypeName, + posLevel: item.employeePosLevel.posLevelName, + projectName: item.development.projectName, + })); - return new HttpSuccess({ data: development, total }); + return new HttpSuccess({ data: formattedData, total }); } /**