diff --git a/src/controllers/PositionController.ts b/src/controllers/PositionController.ts index f9a5e298..4217f351 100644 --- a/src/controllers/PositionController.ts +++ b/src/controllers/PositionController.ts @@ -3689,32 +3689,56 @@ export class PositionController extends Controller { */ @Post("dna") async dna( - @Body() requestBody: { draftPositionId: string; publishPositionId: string }, + @Body() requestBody: { + draftRevisionId?: string | null; //ใช้เฉพาะเคสสืบทอดจากโครงสร้างปัจจุบัน + draftPositionId: string; //ในเคสสืบทอดจากโครงสร้างปัจจุบันจะ "ตำแหน่งที่แบบร่าง" จะเป็น "ตำแหน่งปัจจุบัน" ใช้ draftRevisionId เพื่อเช็คว่าเป็นโครงสร้างปัจจุบันไหม + publishRevisionId?: string | null; //ใช้เฉพาะเคสสืบทอดจากโครงสร้างปัจจุบัน + publishPositionId: string //ในเคสสืบทอดจากโครงสร้างปัจจุบันจะ "ตำแหน่งปัจจุบัน" จะเป็น "ตำแหน่งที่ต้องการจะสืบทอด" ตาม publishRevisionId ที่ส่งมา + }, @Request() request: RequestWithUser, ) { await new permission().PermissionUpdate(request, "SYS_ORG"); + let whereConditionRevision: any = {}; + + // ถ้ามี draftRevisionId ค่อยเพิ่มเข้าไป + if (requestBody.draftRevisionId) { + whereConditionRevision.id = requestBody.draftRevisionId; + } else { + whereConditionRevision.orgRevisionIsDraft = true; + } + const findDraft = await this.orgRevisionRepository.findOne({ - where: { - orgRevisionIsDraft: true, - }, + where: whereConditionRevision, }); if (!findDraft) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้างที่เผยแพร่"); } - const dataPublish = await this.posMasterRepository.findOne({ - where: { - id: requestBody.publishPositionId, - }, + let whereConditionPub: any = {}; + // ถ้ามี publishPositionId ค่อยเพิ่มเข้าไป ***อันนี้อาจไม่ต้องทำเพราะใช้ publishPositionId where ได้โดยตรง (!!รอดูหน้าบ้าน!!)*** + if (requestBody.publishRevisionId) { + whereConditionPub.id = requestBody.publishPositionId; + whereConditionPub.orgRevisionId = requestBody.publishRevisionId + } else { + whereConditionPub.id = requestBody.publishPositionId; + } + const dataPublish = await this.posMasterRepository.findOne({ //เคสโครงสร้างปัจจุบัน: ตัวที่ต้องการจะสืบทอด + where: whereConditionPub, }); if (!dataPublish) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งนี้"); } - const dataDraft = await this.posMasterRepository.findOne({ - where: { - id: requestBody.draftPositionId, - }, + let whereConditionDraft: any = {}; + // ถ้ามี publishPositionId ค่อยเพิ่มเข้าไป ***อันนี้อาจไม่ต้องทำเพราะใช้ draftPositionId where ได้โดยตรง (!!รอดูหน้าบ้าน!!)*** + if (requestBody.draftRevisionId) { + whereConditionDraft.id = requestBody.draftPositionId; + whereConditionDraft.orgRevisionId = requestBody.draftRevisionId + } else { + whereConditionDraft.id = requestBody.draftPositionId; + } + const dataDraft = await this.posMasterRepository.findOne({ //เคสโครงสร้างปัจจุบัน: ตัวปัจจุบัน + where: whereConditionDraft, }); if (!dataDraft) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตำแหน่งนี้");