fix: script update profile
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m10s

This commit is contained in:
Warunee Tamkoo 2026-02-10 17:43:01 +07:00
parent c344804936
commit 520b42f2c7

View file

@ -7219,30 +7219,15 @@ export class OrganizationController extends Controller {
// select: ["posLevelName"], // select: ["posLevelName"],
// }); // });
const [ const [roots, child1, child2, child3, child4, hospital, posType, posLevel] = await Promise.all([
roots,
child1,
child2,
child3,
child4,
hospital,
posType,
posLevel,
] = await Promise.all([
// ===== ROOT ===== // ===== ROOT =====
this.orgRootRepository this.orgRootRepository
.createQueryBuilder("root") .createQueryBuilder("root")
.innerJoin("root.orgRevision", "rev") .innerJoin("root.orgRevision", "rev")
.select([ .select(["root.orgRootName AS orgRootName"])
"root.orgRootName AS orgRootName",
])
.where("rev.orgRevisionIsDraft = false") .where("rev.orgRevisionIsDraft = false")
.andWhere("rev.orgRevisionIsCurrent = true") .andWhere("rev.orgRevisionIsCurrent = true")
.orderBy( .orderBy("CASE WHEN root.DEPARTMENT_CODE = '50' THEN 1 ELSE 0 END", "ASC")
"CASE WHEN root.DEPARTMENT_CODE = '50' THEN 1 ELSE 0 END",
"ASC",
)
.addOrderBy("root.isDeputy", "DESC") .addOrderBy("root.isDeputy", "DESC")
.addOrderBy("root.orgRootOrder", "ASC") .addOrderBy("root.orgRootOrder", "ASC")
.addOrderBy("root.orgRootName", "ASC") .addOrderBy("root.orgRootName", "ASC")
@ -7296,10 +7281,7 @@ export class OrganizationController extends Controller {
.select("c1.orgChild1Name", "orgChild1Name") .select("c1.orgChild1Name", "orgChild1Name")
.where("rev.orgRevisionIsDraft = false") .where("rev.orgRevisionIsDraft = false")
.andWhere("rev.orgRevisionIsCurrent = true") .andWhere("rev.orgRevisionIsCurrent = true")
.andWhere( .andWhere("(root.isDeputy = true OR c1.orgChild1RankSub = :rank)", { rank: "HOSPITAL" })
"(root.isDeputy = true OR c1.orgChild1RankSub = :rank)",
{ rank: "HOSPITAL" },
)
.getRawMany(), .getRawMany(),
// ===== POSITION TYPE ===== // ===== POSITION TYPE =====
@ -8133,7 +8115,8 @@ export class OrganizationController extends Controller {
const toInsert: any[] = []; const toInsert: any[] = [];
// Track draft PosMaster ID to current PosMaster ID mapping for position sync // Track draft PosMaster ID to current PosMaster ID mapping for position sync
const posMasterMapping: Map<string, string> = new Map(); // Type: Map<draftPosMasterId, [currentPosMasterId, nextHolderId]>
const posMasterMapping: Map<string, [string, string | null | undefined]> = new Map();
for (const draftPos of posMasterDraft) { for (const draftPos of posMasterDraft) {
const current = currentByDNA.get(draftPos.ancestorDNA); const current = currentByDNA.get(draftPos.ancestorDNA);
@ -8176,7 +8159,7 @@ export class OrganizationController extends Controller {
toUpdate.push(current); toUpdate.push(current);
// Track mapping for position sync // Track mapping for position sync
posMasterMapping.set(draftPos.id, current.id); posMasterMapping.set(draftPos.id, [current.id, draftPos.next_holderId]);
} else { } else {
// INSERT new position // INSERT new position
const newPosMaster = queryRunner.manager.create(PosMaster, { const newPosMaster = queryRunner.manager.create(PosMaster, {
@ -8208,7 +8191,7 @@ export class OrganizationController extends Controller {
for (let i = 0; i < saved.length; i++) { for (let i = 0; i < saved.length; i++) {
const draftPos = posMasterDraft.filter((d) => !currentByDNA.has(d.ancestorDNA))[i]; const draftPos = posMasterDraft.filter((d) => !currentByDNA.has(d.ancestorDNA))[i];
if (draftPos && saved[i]) { if (draftPos && saved[i]) {
posMasterMapping.set(draftPos.id, saved[i].id); posMasterMapping.set(draftPos.id, [saved[i].id, draftPos.next_holderId]);
} }
} }
} }
@ -8220,13 +8203,14 @@ export class OrganizationController extends Controller {
updated: 0, updated: 0,
inserted: 0, inserted: 0,
}; };
for (const [draftPosMasterId, currentPosMasterId] of posMasterMapping) { for (const [draftPosMasterId, [currentPosMasterId, nextHolderId]] of posMasterMapping) {
const stats = await this.syncPositionsForPosMaster( const stats = await this.syncPositionsForPosMaster(
queryRunner, queryRunner,
draftPosMasterId, draftPosMasterId,
currentPosMasterId, currentPosMasterId,
drafRevisionId, drafRevisionId,
currentRevisionId, currentRevisionId,
nextHolderId,
); );
positionSyncStats.deleted += stats.deleted; positionSyncStats.deleted += stats.deleted;
positionSyncStats.updated += stats.updated; positionSyncStats.updated += stats.updated;
@ -8535,6 +8519,7 @@ export class OrganizationController extends Controller {
currentPosMasterId: string, currentPosMasterId: string,
draftRevisionId: string, draftRevisionId: string,
currentRevisionId: string, currentRevisionId: string,
nextHolderId: string | null | undefined,
): Promise<{ deleted: number; updated: number; inserted: number }> { ): Promise<{ deleted: number; updated: number; inserted: number }> {
// Fetch draft and current positions for this posMaster // Fetch draft and current positions for this posMaster
const [draftPositions, currentPositions] = await Promise.all([ const [draftPositions, currentPositions] = await Promise.all([
@ -8593,6 +8578,10 @@ export class OrganizationController extends Controller {
positionExecutiveField: draftPos.positionExecutiveField, positionExecutiveField: draftPos.positionExecutiveField,
positionArea: draftPos.positionArea, positionArea: draftPos.positionArea,
isSpecial: draftPos.isSpecial, isSpecial: draftPos.isSpecial,
orderNo: draftPos.orderNo,
positionIsSelected: draftPos.positionIsSelected,
lastUpdateFullName: draftPos.lastUpdateFullName,
lastUpdatedAt: new Date(),
}); });
updatedCount++; updatedCount++;
} else { } else {
@ -8605,6 +8594,15 @@ export class OrganizationController extends Controller {
await queryRunner.manager.save(newPosition); await queryRunner.manager.save(newPosition);
insertedCount++; insertedCount++;
} }
// update profile
if (nextHolderId != null && draftPos.positionIsSelected) {
await queryRunner.manager.update(Profile, nextHolderId, {
position: draftPos.positionName,
posTypeId: draftPos.posTypeId,
posLevelId: draftPos.posLevelId,
});
}
} }
return { deleted: toDelete.length, updated: updatedCount, inserted: insertedCount }; return { deleted: toDelete.length, updated: updatedCount, inserted: insertedCount };