From 254d6ae810946ae9e499952df862b9e2e5ac392a Mon Sep 17 00:00:00 2001 From: Adisak Date: Thu, 2 Oct 2025 11:19:14 +0700 Subject: [PATCH] =?UTF-8?q?sort=20=E0=B8=9B=E0=B8=A3=E0=B8=B0=E0=B9=80?= =?UTF-8?q?=E0=B8=A1=E0=B8=B4=E0=B8=99=E0=B8=9C=E0=B8=A5=E0=B8=81=E0=B8=B2?= =?UTF-8?q?=E0=B8=A3=E0=B8=9B=E0=B8=8F=E0=B8=B4=E0=B8=9A=E0=B8=B1=E0=B8=95?= =?UTF-8?q?=E0=B8=B4=E0=B8=A3=E0=B8=B2=E0=B8=8A=E0=B8=81=E0=B8=B2=E0=B8=A3?= =?UTF-8?q?=E0=B8=A3=E0=B8=B0=E0=B8=94=E0=B8=B1=E0=B8=9A=E0=B8=9A=E0=B8=B8?= =?UTF-8?q?=E0=B8=84=E0=B8=84=E0=B8=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/KpiPeriodController.ts | 44 ++++++++++--- .../KpiUserDevelopmentController.ts | 45 ++++++++++++- .../KpiUserEvaluationController.ts | 63 +++++++++++++++++-- 3 files changed, 135 insertions(+), 17 deletions(-) diff --git a/src/controllers/KpiPeriodController.ts b/src/controllers/KpiPeriodController.ts index 3de8a72..d141f96 100644 --- a/src/controllers/KpiPeriodController.ts +++ b/src/controllers/KpiPeriodController.ts @@ -235,20 +235,32 @@ export class kpiPeriodController extends Controller { @Query("pageSize") pageSize: number = 10, @Query("year") year?: number, @Query("keyword") keyword?: string, + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { await new permission().PermissionList(request, "SYS_KPI_ROUND"); - const [kpiPeriod, total] = await AppDataSource.getRepository(KpiPeriod) + let query = await AppDataSource.getRepository(KpiPeriod) .createQueryBuilder("kpiPeriod") .andWhere( year !== 0 && year != null && year != undefined ? "kpiPeriod.year = :year" : "1=1", { year: year }, ) - .orderBy("kpiPeriod.year", "DESC") - .addOrderBy("kpiPeriod.durationKPI", "DESC") - .addOrderBy("kpiPeriod.startDate", "DESC") - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount(); + + if (sortBy) { + query = query.orderBy( + `kpiPeriod.${sortBy}`, + descending ? "DESC" : "ASC" + ); + }else{ + query = query.orderBy("kpiPeriod.year", "DESC") + .addOrderBy("kpiPeriod.durationKPI", "DESC") + .addOrderBy("kpiPeriod.startDate", "DESC") + } + + const [kpiPeriod, total] = await query + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); return new HttpSuccess({ data: kpiPeriod, total }); } @@ -290,15 +302,27 @@ export class kpiPeriodController extends Controller { @Query("pageSize") pageSize: number = 10, @Query("year") year?: number, @Query("keyword") keyword?: string, + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { - const [kpiPeriod, total] = await AppDataSource.getRepository(KpiPeriod) + let query = await AppDataSource.getRepository(KpiPeriod) .createQueryBuilder("kpiPeriod") .andWhere( year !== 0 && year != null && year != undefined ? "kpiPeriod.year = :year" : "1=1", { year: year }, ) - .orderBy("kpiPeriod.year", "DESC") - .addOrderBy("kpiPeriod.createdAt", "DESC") + + if (sortBy) { + query = query.orderBy( + `developmentRequest.${sortBy}`, + descending ? "DESC" : "ASC" + ); + }else{ + query = query.orderBy("kpiPeriod.year", "DESC") + .addOrderBy("kpiPeriod.createdAt", "DESC") + } + + const [kpiPeriod, total] = await query .skip((page - 1) * pageSize) .take(pageSize) .getManyAndCount(); diff --git a/src/controllers/KpiUserDevelopmentController.ts b/src/controllers/KpiUserDevelopmentController.ts index 8f8a2fe..5512e8f 100644 --- a/src/controllers/KpiUserDevelopmentController.ts +++ b/src/controllers/KpiUserDevelopmentController.ts @@ -360,6 +360,8 @@ export class KpiUserDevelopmentController extends Controller { // results?: string | null; // reqedit?: string | null; // evaluating?: boolean | null; + sortBy?: string; + descending?: boolean; }, ) { // await new permission().PermissionList(request, "SYS_RESULT"); @@ -372,7 +374,7 @@ export class KpiUserDevelopmentController extends Controller { _data = x; }) .catch((x) => {}); - const [kpiUserDevelopment, total] = await AppDataSource.getRepository(KpiUserDevelopment) + let query = await AppDataSource.getRepository(KpiUserDevelopment) .createQueryBuilder("kpiUserDevelopment") .leftJoinAndSelect("kpiUserDevelopment.kpiUserEvaluation", "kpiUserEvaluation") .leftJoinAndSelect("kpiUserEvaluation.kpiPeriod", "kpiPeriod") @@ -476,7 +478,46 @@ export class KpiUserDevelopmentController extends Controller { }); }), ) - .orderBy("kpiUserDevelopment.createdAt", "ASC") + + if (requestBody.sortBy) { + if(requestBody.sortBy === "developmentName"){ + query = query.orderBy( + `kpiUserDevelopment.name`, + requestBody.descending ? "DESC" : "ASC" + ); + }else if (requestBody.sortBy === "organization"){ + query = query + .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); + }else if(requestBody.sortBy === "firstname"){ + query = query.orderBy( + `kpiUserEvaluation.firstName`, + requestBody.descending ? "DESC" : "ASC" + ); + }else if(requestBody.sortBy === "lastname"){ + query = query.orderBy( + `kpiUserEvaluation.lastName`, + requestBody.descending ? "DESC" : "ASC" + ); + }else if(requestBody.sortBy === "root"){ + query = query.orderBy( + `kpiUserEvaluation.org`, + requestBody.descending ? "DESC" : "ASC" + ); + }else{ + query = query.orderBy( + `kpiUserEvaluation.${requestBody.sortBy}`, + requestBody.descending ? "DESC" : "ASC" + ); + } + }else{ + query = query.orderBy("kpiUserDevelopment.createdAt", "ASC") + } + + const [kpiUserDevelopment, total] = await query .skip((requestBody.page - 1) * requestBody.pageSize) .take(requestBody.pageSize) .getManyAndCount(); diff --git a/src/controllers/KpiUserEvaluationController.ts b/src/controllers/KpiUserEvaluationController.ts index e78a8ec..61f9f74 100644 --- a/src/controllers/KpiUserEvaluationController.ts +++ b/src/controllers/KpiUserEvaluationController.ts @@ -241,6 +241,8 @@ export class KpiUserEvaluationController extends Controller { results?: string | null; reqedit?: string | null; evaluating?: boolean | null; + sortBy?: string; + descending?: boolean; }, ) { // await new permission().PermissionList(request, "SYS_RESULT"); @@ -253,7 +255,7 @@ export class KpiUserEvaluationController extends Controller { _data = x; }) .catch((x) => {}); - const [kpiUserEvaluation, total] = await AppDataSource.getRepository(KpiUserEvaluation) + let query = await AppDataSource.getRepository(KpiUserEvaluation) .createQueryBuilder("kpiUserEvaluation") .andWhere( _data.root != undefined && _data.root != null @@ -385,7 +387,32 @@ export class KpiUserEvaluationController extends Controller { }); }), ) - .orderBy("kpiUserEvaluation.createdAt", "DESC") + + if (requestBody.sortBy) { + if(requestBody.sortBy === "root"){ + query = query.orderBy( + `kpiUserEvaluation.org`, + requestBody.descending ? "DESC" : "ASC" + ); + }else if(requestBody.sortBy === "organization"){ + query = query + .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); + }else{ + query = query.orderBy( + `kpiUserEvaluation.${requestBody.sortBy}`, + requestBody.descending ? "DESC" : "ASC" + ); + } + }else{ + query = query.orderBy("kpiPeriod.year", "DESC") + .addOrderBy("kpiUserEvaluation.createdAt", "DESC") + } + + const [kpiUserEvaluation, total] = await query .skip((requestBody.page - 1) * requestBody.pageSize) .take(requestBody.pageSize) .getManyAndCount(); @@ -441,6 +468,8 @@ export class KpiUserEvaluationController extends Controller { keyword?: string; status?: string | null; results?: string | null; + sortBy?: string; + descending?: boolean; }, ) { let _data = await new permission().PermissionOrgList(request, "SYS_KPI_LIST"); @@ -452,7 +481,7 @@ export class KpiUserEvaluationController extends Controller { .catch((x) => {}); let conditionFullName = "CONCAT(kpiUserEvaluation.prefix, kpiUserEvaluation.firstName, ' ', kpiUserEvaluation.lastName) LIKE :keyword"; - const [kpiUserEvaluation, total] = await AppDataSource.getRepository(KpiUserEvaluation) + let query = await AppDataSource.getRepository(KpiUserEvaluation) .createQueryBuilder("kpiUserEvaluation") .leftJoinAndSelect("kpiUserEvaluation.kpiPeriod", "kpiPeriod") .andWhere( @@ -564,8 +593,32 @@ export class KpiUserEvaluationController extends Controller { child4: _data.child4, }, ) - .orderBy("kpiPeriod.year", "DESC") - .addOrderBy("kpiUserEvaluation.createdAt", "DESC") + + if (requestBody.sortBy) { + if(requestBody.sortBy === "root"){ + query = query.orderBy( + `kpiUserEvaluation.org`, + requestBody.descending ? "DESC" : "ASC" + ); + }else if(requestBody.sortBy === "organization"){ + query = query + .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") + .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); + }else{ + query = query.orderBy( + `kpiUserEvaluation.${requestBody.sortBy}`, + requestBody.descending ? "DESC" : "ASC" + ); + } + }else{ + query = query.orderBy("kpiPeriod.year", "DESC") + .addOrderBy("kpiUserEvaluation.createdAt", "DESC") + } + + const [kpiUserEvaluation, total] = await query .skip((requestBody.page - 1) * requestBody.pageSize) .take(requestBody.pageSize) .getManyAndCount();