From 8b40eb0ad55b75f47a1cd5b3ff18417722a3a425 Mon Sep 17 00:00:00 2001 From: adisak Date: Tue, 23 Sep 2025 14:56:38 +0700 Subject: [PATCH] sort admin --- .../ProfileDevelopmentEmployeeController.ts | 15 ++++++++- .../ProfileEditEmployeeController.ts | 27 ++++++++++++--- .../ProfileEmployeeTempController.ts | 33 ++++++++++++++++--- 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/controllers/ProfileDevelopmentEmployeeController.ts b/src/controllers/ProfileDevelopmentEmployeeController.ts index c7099378..76260a1b 100644 --- a/src/controllers/ProfileDevelopmentEmployeeController.ts +++ b/src/controllers/ProfileDevelopmentEmployeeController.ts @@ -56,11 +56,14 @@ export class ProfileDevelopmentEmployeeController extends Controller { @Query("page") page: number = 1, @Query("pageSize") pageSize: number = 10, @Query() searchKeyword: string = "", + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_EMP"); if (_workflow == false) await new permission().PermissionOrgUserGet(req, "SYS_REGISTRY_EMP", profileId); - const [profileDevelopment, total] = await AppDataSource.getRepository(ProfileDevelopment) + + let query = await AppDataSource.getRepository(ProfileDevelopment) .createQueryBuilder("profileDevelopment") .where({ profileEmployeeId: profileId }) .andWhere( @@ -100,9 +103,19 @@ export class ProfileDevelopmentEmployeeController extends Controller { }), ) .orderBy("profileDevelopment.createdAt", "ASC") + + if (sortBy) { + query = query.orderBy( + `profileDevelopment.${sortBy}`, + descending ? "DESC" : "ASC" + ); + } + + const [profileDevelopment, total] = await query .skip((page - 1) * pageSize) .take(pageSize) .getManyAndCount(); + return new HttpSuccess({ data: profileDevelopment, total }); } diff --git a/src/controllers/ProfileEditEmployeeController.ts b/src/controllers/ProfileEditEmployeeController.ts index 03e56021..75fa1672 100644 --- a/src/controllers/ProfileEditEmployeeController.ts +++ b/src/controllers/ProfileEditEmployeeController.ts @@ -110,6 +110,8 @@ export class ProfileEditEmployeeController extends Controller { @Query("pageSize") pageSize: number = 10, @Query("keyword") keyword: string = "", @Query("status") status: string = "", + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { let data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_EMP"); const orgRevisionPublish = await this.orgRevisionRepository @@ -117,7 +119,8 @@ export class ProfileEditEmployeeController extends Controller { .where("orgRevision.orgRevisionIsDraft = false") .andWhere("orgRevision.orgRevisionIsCurrent = true") .getOne(); - let [getProfileEdit, total] = await AppDataSource.getRepository(ProfileEdit) + + let query = await AppDataSource.getRepository(ProfileEdit) .createQueryBuilder("ProfileEdit") .leftJoinAndSelect("ProfileEdit.profileEmployee", "profileEmployee") .leftJoinAndSelect("profileEmployee.current_holders", "current_holders") @@ -209,9 +212,25 @@ export class ProfileEditEmployeeController extends Controller { }), ) .orderBy("ProfileEdit.createdAt", "DESC") - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount(); + + if (sortBy) { + if(sortBy == "fullname"){ + query = query.orderBy( + `profileEmployee.firstName`, + descending ? "DESC" : "ASC" + ); + }else{ + query = query.orderBy( + `ProfileEdit.${sortBy}`, + descending ? "DESC" : "ASC" + ); + } + } + + let [getProfileEdit, total] = await query + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); const _data = getProfileEdit.map((item) => ({ id: item.id, diff --git a/src/controllers/ProfileEmployeeTempController.ts b/src/controllers/ProfileEmployeeTempController.ts index b00197a5..e900a99f 100644 --- a/src/controllers/ProfileEmployeeTempController.ts +++ b/src/controllers/ProfileEmployeeTempController.ts @@ -1504,6 +1504,8 @@ export class ProfileEmployeeTempController extends Controller { @Query() isProbation?: boolean, @Query() isRetire?: boolean, @Query() type?: string, + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_TEMP"); let queryLike = @@ -1525,7 +1527,8 @@ export class ProfileEmployeeTempController extends Controller { if (!findRevision) { throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision"); } - const [record, total] = await this.profileRepo + + let query = await this.profileRepo .createQueryBuilder("profileEmployee") .leftJoinAndSelect("profileEmployee.posLevel", "posLevel") .leftJoinAndSelect("profileEmployee.posType", "posType") @@ -1638,9 +1641,31 @@ export class ProfileEmployeeTempController extends Controller { } }), ) - .skip((page - 1) * pageSize) - .take(pageSize) - .getManyAndCount(); + + if (sortBy) { + if(sortBy == "posLevel"){ + query = query.orderBy( + `posLevel.posLevelName`, + descending ? "DESC" : "ASC" + ); + }else if(sortBy == "posType"){ + query = query.orderBy( + `posType.posTypeName`, + descending ? "DESC" : "ASC" + ); + }else{ + query = query.orderBy( + `profileEmployee.${sortBy}`, + descending ? "DESC" : "ASC" + ); + } + } + + const [record, total] = await query + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + const data = await Promise.all( record.map((_data) => { const shortName =