diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 844b4587..6bf7c70d 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -25,6 +25,7 @@ import { PermissionOrg } from "../entities/PermissionOrg"; import { sendWebSocket } from "./webSocket"; import { CreatePosMasterHistoryOfficer } from "./PositionService"; import { PayloadSendNoti } from "../interfaces/utils"; +import { PermissionProfile } from "../entities/PermissionProfile"; export let sendToQueue: (payload: any) => void; export let sendToQueueOrg: (payload: any) => void; @@ -496,6 +497,8 @@ async function handler_command_noti(msg: amqp.ConsumeMessage): Promise async function handler_org(msg: amqp.ConsumeMessage): Promise { //----> condition before process consume const repoPosmaster = AppDataSource.getRepository(PosMaster); + const posMasterAssignRepository = AppDataSource.getRepository(PosMasterAssign); + const permissionProfilesRepository = AppDataSource.getRepository(PermissionProfile); const repoEmployeePosmaster = AppDataSource.getRepository(EmployeePosMaster); const repoEmployeeTempPosmaster = AppDataSource.getRepository(EmployeeTempPosMaster); const repoProfile = AppDataSource.getRepository(Profile); @@ -557,8 +560,75 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { "positions.posExecutive", ], }); + // // xxx + // // ดึง assignment ของ revision เดิม + // const oldAssigns = await posMasterAssignRepository.find({ + // relations: ["posMaster"], + // where: { + // posMaster: { + // orgRevisionId: orgRevisionPublish?.id, + // }, + // }, + // }); + // // สร้าง Map: ancestorDNA → assignments[] + // const assignMap = new Map(); + // for (const a of oldAssigns) { + // const dna = a.posMaster.ancestorDNA; + // if (!assignMap.has(dna)) { + // assignMap.set(dna, []); + // } + // assignMap.get(dna)!.push(a); + // } + // const permissionProfiles = await permissionProfilesRepository.find({ + // relations: ["orgRootTree"], + // where: { + // orgRootTree: { + // orgRevisionId: orgRevisionPublish?.id, + // } + // } + // }); + // const permissionMap = new Map(); + // for (const p of permissionProfiles) { + // const dna = p.orgRootTree.ancestorDNA; + // if (!permissionMap.has(dna)) { + // permissionMap.set(dna, []); + // } + // permissionMap.get(dna)!.push(p); + // } + // const newRoots = await orgRootRepository.find({ + // where: { orgRevisionId: orgRevisionDraft?.id }, + // }); + // const newRootMap = new Map( + // newRoots.map(r => [r.ancestorDNA, r.id]) + // ); const _null: any = null; for (const item of posMaster) { + // /* =============================== + // * Clone posMasterAssign & permissionProfiles xxx + // * =============================== */ + // const assigns = assignMap.get(item.ancestorDNA); + + // if (assigns && assigns.length > 0) { + // const newAssigns = assigns.map(({ id, ...rest }) => ({ + // ...rest, // copy ทุก field ยกเว้น id + // posMasterId: item.id, // ผูกกับ posMaster ใหม่ + // })); + + // await posMasterAssignRepository.save(newAssigns); + // } + + // const perms = permissionMap.get(item.ancestorDNA); + // const newRootId = newRootMap.get(item.ancestorDNA); + + // if (perms && perms.length > 0 && newRootId) { + // const newPerms = perms.map(({ id, orgRootTree, ...rest }) => ({ + // ...rest, // profileId, isEdit, isCheck + // orgRootId: newRootId, + // })); + + // await permissionProfilesRepository.save(newPerms); + // } + if (item.next_holderId != null) { const profile = await repoProfile.findOne({ where: { id: item.next_holderId == null ? "" : item.next_holderId }, @@ -1798,13 +1868,13 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { posMaster.lastUpdatedAt = new Date(); await posMasterRepository.save(posMaster); - // Copy assignments - await posMasterAssignRepository.save( - posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ - ...rest, - posMasterId: posMaster.id, - })), - ); + // // Copy assignments + // await posMasterAssignRepository.save( + // posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ + // ...rest, + // posMasterId: posMaster.id, + // })), + // ); // Create positions for await (const pos of item.positions) { @@ -1895,13 +1965,13 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { posMaster.lastUpdatedAt = new Date(); await posMasterRepository.save(posMaster); - // Copy assignments - await posMasterAssignRepository.save( - posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ - ...rest, - posMasterId: posMaster.id, - })), - ); + // // Copy assignments + // await posMasterAssignRepository.save( + // posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ + // ...rest, + // posMasterId: posMaster.id, + // })), + // ); // Create positions for await (const pos of item.positions) { @@ -1994,13 +2064,13 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { posMaster.lastUpdatedAt = new Date(); await posMasterRepository.save(posMaster); - // Copy assignments - await posMasterAssignRepository.save( - posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ - ...rest, - posMasterId: posMaster.id, - })), - ); + // // Copy assignments + // await posMasterAssignRepository.save( + // posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ + // ...rest, + // posMasterId: posMaster.id, + // })), + // ); // Create positions for await (const pos of item.positions) { @@ -2095,13 +2165,13 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { posMaster.lastUpdatedAt = new Date(); await posMasterRepository.save(posMaster); - // Copy assignments - await posMasterAssignRepository.save( - posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ - ...rest, - posMasterId: posMaster.id, - })), - ); + // // Copy assignments + // await posMasterAssignRepository.save( + // posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ + // ...rest, + // posMasterId: posMaster.id, + // })), + // ); // Create positions for await (const pos of item.positions) { @@ -2199,13 +2269,13 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { posMaster.lastUpdatedAt = new Date(); await posMasterRepository.save(posMaster); - // Copy assignments - await posMasterAssignRepository.save( - posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ - ...rest, - posMasterId: posMaster.id, - })), - ); + // // Copy assignments + // await posMasterAssignRepository.save( + // posMasterAssign.map(({ id, ...rest }: PosMasterAssign) => ({ + // ...rest, + // posMasterId: posMaster.id, + // })), + // ); // Create positions for await (const pos of item.positions) { @@ -2287,9 +2357,30 @@ async function handler_org_draft(msg: amqp.ConsumeMessage): Promise { await child3Repository.delete({ orgRevisionId: In(_orgRevisions.map((x) => x.id)) }); await child2Repository.delete({ orgRevisionId: In(_orgRevisions.map((x) => x.id)) }); await child1Repository.delete({ orgRevisionId: In(_orgRevisions.map((x) => x.id)) }); - await permissionOrgRepository.delete({ - orgRootId: In(_roots.map((x) => x.id)), - }); + // ถ้าเลือกทำสำเนาให้อัพเดทจากแบบร่างเดิมไปแบบร่างใหม่แทนการลบ xxx + if (["ORG", "ORG_POSITION", "ORG_POSITION_PERSON", "ORG_POSITION_ROLE", "ORG_POSITION_PERSON_ROLE"].includes(requestBody.typeDraft?.toUpperCase())) + { + const _newRoots = await orgRootRepository.find({ + where: { orgRevisionId: revision.id} + }); + const newRootMap = new Map( + _newRoots.map(r => [r.ancestorDNA, r.id]) + ); + for (const oldRoot of _roots) { + const newRootId = newRootMap.get(oldRoot.ancestorDNA); + if (!newRootId) continue; + // อัพเดท orgRootId ที่อยู่ภายใต้ orgRevision แบบร่างเดิมเป็นของ orgRevision แบบร่างใหม่ + await permissionOrgRepository.update( + { orgRootId: oldRoot.id }, + { orgRootId: newRootId } + ); + } + } + else { + await permissionOrgRepository.delete({ + orgRootId: In(_roots.map((x) => x.id)), + }); + } await orgRootRepository.delete({ orgRevisionId: In(_orgRevisions.map((x) => x.id)) }); await orgRevisionRepository.remove(_orgRevisions);