diff --git a/src/controllers/ProfileLeaveController.ts b/src/controllers/ProfileLeaveController.ts index ae7bcfe3..bc2b07ba 100644 --- a/src/controllers/ProfileLeaveController.ts +++ b/src/controllers/ProfileLeaveController.ts @@ -260,6 +260,40 @@ export class ProfileLeaveController extends Controller { return new HttpSuccess(); } + @Patch("cancel/{leaveId}") + public async updateCancel( + @Request() req: RequestWithUser, + @Path() leaveId: string, + ) { + const record = await this.leaveRepo.findOneBy({ leaveId: leaveId }); + if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลการลา"); + + const before = structuredClone(record); + const history = new ProfileLeaveHistory(); + + Object.assign(history, { ...record, id: undefined }); + + record.status = "CANCEL"; + history.profileLeaveId = leaveId; + record.lastUpdateUserId = req.user.sub; + record.lastUpdateFullName = req.user.name; + record.lastUpdatedAt = new Date(); + history.lastUpdateUserId = req.user.sub; + history.lastUpdateFullName = req.user.name; + history.createdUserId = req.user.sub; + history.createdFullName = req.user.name; + history.createdAt = new Date(); + history.lastUpdatedAt = new Date(); + + await Promise.all([ + this.leaveRepo.save(record, { data: req }), + setLogDataDiff(req, { before, after: record }), + this.leaveHistoryRepo.save(history, { data: req }), + ]); + + return new HttpSuccess(); + } + @Delete("{leaveId}") public async deleteLeave(@Path() leaveId: string, @Request() req: RequestWithUser) { const _record = await this.leaveRepo.findOneBy({ id: leaveId }); diff --git a/src/entities/ProfileLeave.ts b/src/entities/ProfileLeave.ts index b3884f2f..f901081c 100644 --- a/src/entities/ProfileLeave.ts +++ b/src/entities/ProfileLeave.ts @@ -86,6 +86,14 @@ export class ProfileLeave extends EntityBase { }) reason: string; + @Column({ + nullable: true, + length: 40, + comment: "คีย์นอก(FK)ของตาราง LeaveRequest(hrms)", + default: null, + }) + leaveId: string; + @OneToMany(() => ProfileLeaveHistory, (v) => v.profileLeave) histories: ProfileLeaveHistory[]; @@ -124,6 +132,7 @@ export class CreateProfileLeave { totalLeave?: number | null; status?: string | null; reason: string | null; + leaveId?: string | null; } export class CreateProfileEmployeeLeave { @@ -136,6 +145,7 @@ export class CreateProfileEmployeeLeave { totalLeave: number | null; status: string | null; reason: string | null; + leaveId?: string | null; } export type UpdateProfileLeave = {