diff --git a/src/controllers/ProfileSalaryTempController.ts b/src/controllers/ProfileSalaryTempController.ts index 7d3d1698..3a2b9dca 100644 --- a/src/controllers/ProfileSalaryTempController.ts +++ b/src/controllers/ProfileSalaryTempController.ts @@ -16,6 +16,7 @@ import { ProfileSalary } from "../entities/ProfileSalary"; import HttpSuccess from "../interfaces/http-success"; import HttpStatus from "../interfaces/http-status"; import HttpError from "../interfaces/http-error"; +import HttpStatusCode from "../interfaces/http-status"; import { RequestWithUser } from "../middlewares/user"; import { Brackets, IsNull, LessThan, MoreThan, Not } from "typeorm"; import { setLogDataDiff } from "../interfaces/utils"; @@ -29,6 +30,8 @@ import { ProfileEmployee } from "../entities/ProfileEmployee"; import permission from "../interfaces/permission"; import { OrgRevision } from "../entities/OrgRevision"; import Extension from "../interfaces/extension"; +import { CreatePositionSalaryEditHistory, PositionSalaryEditHistory } from "../entities/PositionSalaryEditHistory"; + @Route("api/v1/org/profile/salaryTemp") @Tags("ProfileSalaryTemp") @Security("bearerAuth") @@ -38,6 +41,7 @@ export class ProfileSalaryTempController extends Controller { private salaryRepo = AppDataSource.getRepository(ProfileSalaryTemp); private salaryOldRepo = AppDataSource.getRepository(ProfileSalary); private orgRevisionRepo = AppDataSource.getRepository(OrgRevision); + private positionSalaryEditHistoryRepo = AppDataSource.getRepository(PositionSalaryEditHistory); /** * API ค้นหารายการคน @@ -149,12 +153,29 @@ export class ProfileSalaryTempController extends Controller { .andWhere( new Brackets((qb) => { qb.orWhere( - searchKeyword != undefined && searchKeyword != null && searchKeyword != "" - ? queryLike + searchKeyword != null && searchKeyword != "" + ? `profile.citizenId like '%${searchKeyword}%'` + : "1=1", + ) + .orWhere( + searchKeyword != null && searchKeyword != "" + ? `profile.position like '%${searchKeyword}%'` + : "1=1", + ) + .orWhere( + searchKeyword != null && searchKeyword != "" + ? `CONCAT(profile.prefix, profile.firstName," ",profile.lastName) like '%${searchKeyword}%'` + : "1=1", + ) + .orWhere( + searchKeyword != null && searchKeyword != "" + ? `posType.posTypeName like '%${searchKeyword}%'` + : "1=1", + ) + .orWhere( + searchKeyword != null && searchKeyword != "" + ? `posLevel.posLevelName like '%${searchKeyword}%'` : "1=1", - { - keyword: `%${searchKeyword}%`, - }, ); }), ) @@ -1054,4 +1075,84 @@ export class ProfileSalaryTempController extends Controller { } return new HttpSuccess(); } + + /** + * API ตีกลับแก้ไข + * + * @summary API ตีกลับแก้ไข + * + */ + @Patch("return-edit/{profileId}") + public async returnEdit( + @Path() profileId: string, + @Body() body: CreatePositionSalaryEditHistory, + @Request() req: RequestWithUser, + ) { + let profile = null; + let profileEmployee = null; + profile = await this.profileRepo.findOneBy({ id: profileId }); + + if (!profile) { + profileEmployee = await this.profileEmployeeRepo.findOneBy({ id: profileId }); + if (!profileEmployee) { + throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); + } + } + + try { + if (profile) { + profile.statusCheckEdit = "PENDING"; + await this.profileRepo.save(profile); + } else if (profileEmployee) { + profileEmployee.statusCheckEdit = "PENDING"; + await this.profileEmployeeRepo.save(profileEmployee); + } + + const history : PositionSalaryEditHistory = Object.assign(new PositionSalaryEditHistory(), body); + if (profile) { + history.profileId = profileId; + } else if (profileEmployee) { + history.profileEmployeeId = profileId; + } + history.examinerName = req.user.name; + history.createdFullName = req.user.name; + history.lastUpdateFullName = req.user.name; + await this.positionSalaryEditHistoryRepo.save(history); + + return new HttpSuccess(); + } catch { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้"); + } + } + + /** + * API รายการประวัติตีกลับแก้ไข + * + * @summary API รายการประวัติตีกลับแก้ไข + * + */ + @Get("return-edit/history/{profileId}") + public async returnEditHistory( + @Path() profileId: string, + ) { + try{ + + let history = await this.positionSalaryEditHistoryRepo.find({ + where:{ profileId: profileId }, + order: { returnedDate: "DESC" } + }); + + //EMP + if(!history){ + history = await this.positionSalaryEditHistoryRepo.find({ + where:{ profileEmployeeId: profileId }, + order: { returnedDate: "DESC" } + }); + } + + return new HttpSuccess(history); + } catch { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้"); + } + } } diff --git a/src/entities/PositionSalaryEditHistory.ts b/src/entities/PositionSalaryEditHistory.ts index 52156a2b..50003f71 100644 --- a/src/entities/PositionSalaryEditHistory.ts +++ b/src/entities/PositionSalaryEditHistory.ts @@ -44,7 +44,7 @@ export class PositionSalaryEditHistory extends EntityBase { comment: "รายละเอียดที่แจ้งให้แก้ไข", default: null, }) - detailForEdit: number; + detailForEdit: string; @ManyToOne(() => Profile, (profile) => profile.positionSalaryEditHistory) @JoinColumn({ name: "profileId" }) @@ -57,16 +57,7 @@ export class PositionSalaryEditHistory extends EntityBase { } export class CreatePositionSalaryEditHistory { - profileId: string | null; returnedDate: Date; - examinerName: string | null; - detailForEdit: string | null; -} - -export class CreatePositionSalaryEditHistoryEmp { - profileEmployeeId: string | null; - returnedDate: Date; - examinerName: string | null; detailForEdit: string | null; }