diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index 9e654ffe..e836ad41 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -39,6 +39,8 @@ import { commandTypePath, removeProfileInOrganize, setLogDataDiff, + checkReturnCommandType, + checkExceptCommandType, checkCommandType, } from "../interfaces/utils"; import { Position } from "../entities/Position"; @@ -1837,6 +1839,30 @@ export class CommandController extends Controller { profile.posTypeId = _null; profile.posLevelId = _null; } + const returnWork = await checkReturnCommandType(String(item.commandId)); + if(returnWork && item.isGovernment) { + const userKeycloakId = await createUser(profile.citizenId, profile.citizenId, { + firstName: profile.firstName, + lastName: profile.lastName, + }); + if (typeof userKeycloakId !== "string") { + throw new Error(userKeycloakId.errorMessage); + } + const list = await getRoles(); + if (!Array.isArray(list)) + throw new Error("Failed. Cannot get role(s) data from the server."); + const result = await addUserRoles( + userKeycloakId, + list + .filter((v) => v.name === "USER") + .map((x) => ({ + id: x.id, + name: x.name, + })), + ); + if (!result) throw new Error("Failed. Cannot set user's role."); + profile.keycloak = userKeycloakId; + } await this.profileRepository.save(profile); }), ); @@ -2113,7 +2139,7 @@ export class CommandController extends Controller { // ประวัติตำแหน่ง const data = new ProfileSalary(); const meta = { - profileId: item.profileId, + profileId: profile.id, date: item.date, refCommandNo: item.refCommandNo, templateDoc: item.salaryRef, @@ -2185,7 +2211,8 @@ export class CommandController extends Controller { profile.lastUpdateUserId = req.user.sub; profile.lastUpdateFullName = req.user.name; profile.lastUpdatedAt = new Date(); - if (item.isLeave == true) { + const exceptClear = await checkExceptCommandType(String(item.commandId)); + if (item.isLeave == true && !exceptClear) { await removeProfileInOrganize(profile.id, "OFFICER"); } const clearProfile = await checkCommandType(String(item.commandId)); diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 3285681a..62beaf69 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -3885,7 +3885,7 @@ export class ProfileController extends Controller { }, relations: ["orgChild1"], }); - if (posMasters == null || posMasters.orgChild1 == null) { + if (posMasters == null) { return new HttpSuccess({ isOfficer: null, rootId: null, @@ -3896,7 +3896,7 @@ export class ProfileController extends Controller { }); } return new HttpSuccess({ - isOfficer: posMasters?.orgChild1?.isOfficer || null, + isOfficer: posMasters?.orgChild1?.isOfficer || false, rootId: posMasters?.orgRootId || null, child1Id: posMasters?.orgChild1Id || null, child2Id: posMasters?.orgChild2Id || null, diff --git a/src/controllers/WorkflowController.ts b/src/controllers/WorkflowController.ts index 8b334a83..2d60eed2 100644 --- a/src/controllers/WorkflowController.ts +++ b/src/controllers/WorkflowController.ts @@ -156,6 +156,39 @@ export class WorkflowController extends Controller { }), ); + const _workflow = await this.workflowRepo.findOne({ + where: { id: workflow.id }, + relations: ["stateOperatorUsers"], + }); + if (!_workflow) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่สามารถดำเนินการกระบวนการนี้ได้"); + + const _state = await this.stateRepo.findOne({ + where: { + id: _workflow.stateId, + }, + relations: ["stateOperators"], + }); + if (!_state) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลขั้นตอนการอนุมัติ"); + let profileNow = _workflow.stateOperatorUsers + .filter((x) => _state.stateOperators.map((s) => s.operator).includes(x.operator)) + .map((x) => ({ + receiverUserId: x.profile, + notiLink: "", + })); + await new CallAPI() + .PostData(req, "/placement/noti/profiles", { + subject: `รายการถูกส่ง`, + body: `รายการถูกส่ง`, + receiverUserIds: profileNow, + payload: "", //แนบไฟล์ + isSendMail: true, + isSendInbox: true, + isSendNotification: true, + }) + .catch((error) => { + console.error("Error calling API:", error); + }); + return new HttpSuccess(); } diff --git a/src/interfaces/utils.ts b/src/interfaces/utils.ts index 826df67f..91070e1d 100644 --- a/src/interfaces/utils.ts +++ b/src/interfaces/utils.ts @@ -175,6 +175,34 @@ export async function removeProfileInOrganize(profileId: string, type: string) { } } +export async function checkReturnCommandType(commandId: string) { + const commandRepository = AppDataSource.getRepository(Command); + const _type = await commandRepository.findOne({ + where: { + id: commandId + }, + relations: ["commandType"], + }); + if (!["C-PM-08", "C-PM-09"].includes(String(_type?.commandType.code))) { + return false; + } + return true; +} + +export async function checkExceptCommandType(commandId: string) { + const commandRepository = AppDataSource.getRepository(Command); + const _type = await commandRepository.findOne({ + where: { + id: commandId + }, + relations: ["commandType"], + }); + if (!["C-PM-25", "C-PM-26"].includes(String(_type?.commandType.code))) { + return false; + } + return true; +} + export async function checkCommandType(commandId: string) { const commandRepository = AppDataSource.getRepository(Command); const _type = await commandRepository.findOne({