diff --git a/src/controllers/ProfileChangeNameController.ts b/src/controllers/ProfileChangeNameController.ts index 77cff634..fa88a252 100644 --- a/src/controllers/ProfileChangeNameController.ts +++ b/src/controllers/ProfileChangeNameController.ts @@ -25,6 +25,7 @@ import { } from "../entities/ProfileChangeName"; import { updateName } from "../keycloak"; import permission from "../interfaces/permission"; +import { updateHolderProfileHistory } from "../services/PositionService"; import { setLogDataDiff } from "../interfaces/utils"; @Route("api/v1/org/profile/changeName") @Tags("ProfileChangeName") @@ -127,6 +128,9 @@ export class ProfileChangeNameController extends Controller { } } + // บันทึกประวัติคนครองตำแหน่ง (ถ้า profile นี้ครองตำแหน่งอยู่) + await updateHolderProfileHistory(profile.id, req); + return new HttpSuccess(data.id); } diff --git a/src/controllers/ProfileChangeNameEmployeeController.ts b/src/controllers/ProfileChangeNameEmployeeController.ts index c2df9c8c..0a6f2ff0 100644 --- a/src/controllers/ProfileChangeNameEmployeeController.ts +++ b/src/controllers/ProfileChangeNameEmployeeController.ts @@ -24,6 +24,7 @@ import { } from "../entities/ProfileChangeName"; import { ProfileEmployee } from "../entities/ProfileEmployee"; import permission from "../interfaces/permission"; +import { updateHolderProfileHistory } from "../services/PositionService"; import { updateName } from "../keycloak"; import { setLogDataDiff } from "../interfaces/utils"; @Route("api/v1/org/profile-employee/changeName") @@ -133,6 +134,9 @@ export class ProfileChangeNameEmployeeController extends Controller { } } + // บันทึกประวัติคนครองตำแหน่ง (ถ้า profile นี้ครองตำแหน่งอยู่) + await updateHolderProfileHistory(profile.id, req, "EMPLOYEE"); + return new HttpSuccess(data.id); } diff --git a/src/services/PositionService.ts b/src/services/PositionService.ts index b6514eca..37c5f083 100644 --- a/src/services/PositionService.ts +++ b/src/services/PositionService.ts @@ -501,3 +501,61 @@ export async function BatchSavePosMasterHistoryOfficer( return false; } } + +/** + * อัพเดทประวัติคนครองตำแหน่งเมื่อมีการเปลี่ยนแปลงข้อมูล profile + * เช่น เปลี่ยนชื่อ - นามสกุล + * ใช้สำหรับบันทึกประวัติเมื่อ profile ที่ครองตำแหน่งมีการเปลี่ยนแปลง + * + * @param profileId ID ของ profile ที่ต้องการตรวจสอบ + * @param request RequestWithUser สำหรับบันทึกข้อมูลผู้ดำเนินการ + * @param type "OFFICER" สำหรับข้าราชการ | "EMPLOYEE" สำหรับลูกจ้างประจำ (default: "OFFICER") + */ +export async function updateHolderProfileHistory( + profileId: string, + request: RequestWithUser, + type: "OFFICER" | "EMPLOYEE" = "OFFICER", +): Promise { + try { + if (type === "OFFICER") { + const posMasterRepo = AppDataSource.getRepository(PosMaster); + const posMaster = await posMasterRepo.findOne({ + where: { + current_holderId: profileId, + orgRevision: { + orgRevisionIsCurrent: true, + orgRevisionIsDraft: false, + } + }, + relations: { + orgRevision : true + } + }); + + if (posMaster) { + await CreatePosMasterHistoryOfficer(posMaster.id, request); + } + } else if (type === "EMPLOYEE") { + const empPosMasterRepo = AppDataSource.getRepository(EmployeePosMaster); + const employeePosMaster = await empPosMasterRepo.findOne({ + where: { + current_holderId: profileId, + orgRevision: { + orgRevisionIsCurrent: true, + orgRevisionIsDraft: false, + } + }, + relations: { + orgRevision : true + } + }); + + if (employeePosMaster) { + await CreatePosMasterHistoryEmployee(employeePosMaster.id, request); + } + } + } catch (error) { + console.error("updateHolderProfileHistory error:", error); + throw error; + } +}