diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 6118e40d..ca701323 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -6114,8 +6114,10 @@ export class ProfileController extends Controller { @Query() nodeId?: string, @Query() isAll?: boolean, @Query() retireType?: string, - @Query() sortBy?: string, + // @Query() sortBy: string = "current_holders.posMasterNo", @Query() sort: "ASC" | "DESC" = "ASC", + @Query("sortBy") sortBy?: string, + @Query("descending") descending?: boolean, ) { let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_OFFICER"); let queryLike = @@ -6155,7 +6157,7 @@ export class ProfileController extends Controller { nodeCondition = nodeCondition + nodeAll; // เลือกเฉพาะฟิลด์ที่จำเป็น - const [record, total] = await this.profileRepo + let query = await this.profileRepo .createQueryBuilder("profile") .leftJoin("profile.posLevel", "posLevel") .leftJoin("profile.posType", "posType") @@ -6201,6 +6203,9 @@ export class ProfileController extends Controller { "orgChild4.orgChild4Name", "orgChild4.orgChild4ShortName", "orgChild4.orgChild4Order", + "positions.id", + "posExecutive.id", + "posExecutive.posExecutiveName", ]) // .where(node && nodeId ? "current_holders.orgRevisionId = :orgRevisionId" : "1=1", { // orgRevisionId: @@ -6277,14 +6282,30 @@ export class ProfileController extends Controller { qb.orWhere(searchKeyword ? queryLike : "1=1", { keyword: `%${searchKeyword}%` }); }), ) - .addSelect("CASE WHEN current_holders.posMasterNo IS NULL THEN 1 ELSE 0 END", "sort_order") - .orderBy(`${sortBy ? sortBy : "sort_order"}`, `${sort}`) - .addOrderBy("orgRoot.orgRootOrder", sort) - .addOrderBy("orgChild1.orgChild1Order", sort) - .addOrderBy("orgChild2.orgChild2Order", sort) - .addOrderBy("orgChild3.orgChild3Order", sort) - .addOrderBy("orgChild4.orgChild4Order", sort) - .addOrderBy("current_holders.posMasterNo", sort) + .addSelect("CASE WHEN current_holders.posMasterNo IS NULL THEN 1 ELSE 0 END", "sort_order"); + + 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 if (sortBy === "posExecutive") { + query = query.orderBy(`posExecutive.posExecutiveName`, descending ? "DESC" : "ASC"); + } else { + query = query.orderBy(`profile.${sortBy}`, descending ? "DESC" : "ASC"); + } + } else { + query = query + .orderBy("sort_order", "ASC") + .addOrderBy("orgRoot.orgRootOrder", sort) + .addOrderBy("orgChild1.orgChild1Order", sort) + .addOrderBy("orgChild2.orgChild2Order", sort) + .addOrderBy("orgChild3.orgChild3Order", sort) + .addOrderBy("orgChild4.orgChild4Order", sort) + .addOrderBy("current_holders.posMasterNo", sort); + } + + const [record, total] = await query .skip((page - 1) * pageSize) .take(pageSize) .getManyAndCount(); @@ -6331,6 +6352,8 @@ export class ProfileController extends Controller { posLevelId: _data.posLevel?.id ?? null, posTypeId: _data.posType?.id ?? null, position: _data.position, + posExecutive: + _data.current_holders[0]?.positions[0]?.posExecutive?.posExecutiveName ?? null, posNo: shortName ?? null, rootId: holder?.orgRoot?.id ?? null, root: holder?.orgRoot?.orgRootName ?? null,