From ee4bff7f50b48e004623eea163376919f72d730d Mon Sep 17 00:00:00 2001 From: harid Date: Mon, 3 Nov 2025 18:05:29 +0700 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E0=B8=9C=E0=B8=B9=E0=B9=89=E0=B9=80?= =?UTF-8?q?=E0=B8=81=E0=B8=A9=E0=B8=B5=E0=B8=A2=E0=B8=93=20=E0=B9=83?= =?UTF-8?q?=E0=B8=99=E0=B9=81=E0=B8=9A=E0=B8=9A=E0=B8=A3=E0=B9=88=E0=B8=B2?= =?UTF-8?q?=E0=B8=87=20=E0=B8=82=E0=B8=AD=E0=B8=87=E0=B8=A3=E0=B8=B0?= =?UTF-8?q?=E0=B8=9A=E0=B8=9A=E0=B9=82=E0=B8=84=E0=B8=A3=E0=B8=87=E0=B8=AA?= =?UTF-8?q?=E0=B8=A3=E0=B9=89=E0=B8=B2=E0=B8=87=E0=B9=84=E0=B8=A1=E0=B9=88?= =?UTF-8?q?=E0=B8=96=E0=B8=B9=E0=B8=81=E0=B8=9B=E0=B8=A5=E0=B8=94=20#1912?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.ts | 4 +- src/controllers/CommandController.ts | 94 ++++++++++++++++------------ 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/src/app.ts b/src/app.ts index 6913a2c1..368be40f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -67,8 +67,8 @@ async function main() { }); // const cronTime_Oct = "0 0 1 10 *"; - // Test #1892 - const cronTime_Oct = "0 0 31 10 *"; + // Test #1912 + const cronTime_Oct = "0 0 4 11 *"; cron.schedule(cronTime_Oct, async () => { try { const commandController = new CommandController(); diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index a6885004..e4538538 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -1477,24 +1477,6 @@ export class CommandController extends Controller { } // @Get("XXX") async cronjobUpdateRetirementStatus(/*@Request() request: RequestWithUser*/) { - // let body = { - // client_id: "gettoken", - // client_secret: process.env.AUTH_ACCOUNT_SECRET, - // grant_type: "client_credentials", - // }; - // const postData = querystring.stringify(body); - // const response = await axios.post( - // `${process.env.KC_URL}/realms/${process.env.KC_REALMS}/protocol/openid-connect/token`, - // postData, - // { - // headers: { - // "Content-Type": "application/x-www-form-urlencoded", - // api_key: process.env.API_KEY, - // }, - // }, - // ); - // const adminToken = response.data.access_token; - // const adminToken = request.headers["authorization"]?.replace("Bearer ", ""); const adminToken = await getToken() ?? ""; const today = new Date(); today.setUTCHours(0, 0, 0, 0); @@ -1668,32 +1650,30 @@ export class CommandController extends Controller { } async posMasterRetire(profileId: string, type: string, _Date: Date) { - const orgRevision = await this.orgRevisionRepo.findOne({ + const revisionIsCurrent = await this.orgRevisionRepo.findOne({ where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false }, }); - if (orgRevision) { + if (revisionIsCurrent) { let _posMaster: any = null; - let _position: any = null; if (type == "OFFICER") { _posMaster = await this.posMasterRepository.findOne({ where: { - orgRevisionId: orgRevision.id, + orgRevisionId: revisionIsCurrent.id, current_holderId: profileId, }, }); if (_posMaster) { - _position = await this.positionRepository.findOne({ - where: { + await this.positionRepository.update( + { posMasterId: _posMaster.id, positionIsSelected: true, }, - }); - if (_position) { - _position.positionIsSelected = false; - _position.lastUpdateFullName = "System Administrator"; - _position.lastUpdatedAt = _Date; - await this.positionRepository.save(_position); - } + { + positionIsSelected: false, + lastUpdateFullName: "System Administrator", + lastUpdatedAt: _Date, + } + ); _posMaster.isSit = false; _posMaster.current_holderId = null; _posMaster.lastUpdateFullName = "System Administrator"; @@ -1701,26 +1681,57 @@ export class CommandController extends Controller { await this.posMasterRepository.save(_posMaster); await CreatePosMasterHistoryOfficer(_posMaster.id, null); } + const revisionIsDraft = await this.orgRevisionRepo.findOne({ + where: { orgRevisionIsCurrent: false, orgRevisionIsDraft: true }, + }); + if (revisionIsDraft) { + _posMaster = null; + _posMaster = await this.posMasterRepository.findOne({ + where: { + orgRevisionId: revisionIsDraft.id, + next_holderId: profileId, + }, + }); + if (_posMaster) { + await this.positionRepository.update( + { + posMasterId: _posMaster.id, + positionIsSelected: true, + }, + { + positionIsSelected: false, + lastUpdateFullName: "System Administrator", + lastUpdatedAt: _Date, + } + ); + _posMaster.isSit = false; + _posMaster.next_holderId = null; + _posMaster.lastUpdateFullName = "System Administrator"; + _posMaster.lastUpdatedAt = _Date; + await this.posMasterRepository.save(_posMaster); + await CreatePosMasterHistoryOfficer(_posMaster.id, null); + } + // console.log("clear posMaster & position 'Draf' success") + } } else if (type == "EMPLOYEE") { _posMaster = await this.employeePosMasterRepository.findOne({ where: { - orgRevisionId: orgRevision.id, + orgRevisionId: revisionIsCurrent.id, current_holderId: profileId, }, }); if (_posMaster) { - _position = await this.employeePositionRepository.findOne({ - where: { + await this.employeePositionRepository.update( + { posMasterId: _posMaster.id, positionIsSelected: true, }, - }); - if (_position) { - _position.positionIsSelected = false; - _position.lastUpdateFullName = "System Administrator"; - _position.lastUpdatedAt = _Date; - await this.employeePositionRepository.save(_position); - } + { + positionIsSelected: false, + lastUpdateFullName: "System Administrator", + lastUpdatedAt: _Date, + } + ); _posMaster.isSit = false; _posMaster.current_holderId = null; _posMaster.lastUpdateFullName = "System Administrator"; @@ -1729,6 +1740,7 @@ export class CommandController extends Controller { await CreatePosMasterHistoryEmployee(_posMaster.id, null); } } + // console.log("clear posMaster & position 'Current' success") } } From 40bc95bb87e613d2f8a1b71971d591f22d754cb6 Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Mon, 3 Nov 2025 21:37:50 +0700 Subject: [PATCH 2/2] update org --- src/controllers/ImportDataController.ts | 44 ++++++++++++++----------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/controllers/ImportDataController.ts b/src/controllers/ImportDataController.ts index d6345ac0..e2339b8f 100644 --- a/src/controllers/ImportDataController.ts +++ b/src/controllers/ImportDataController.ts @@ -6316,45 +6316,49 @@ export class ImportDataController extends Controller { @Post("updateRetireClearOrg") async updateRetireClearOrg(@Request() request: { user: Record }) { const profiles = await this.profileRepo.find({ - where: { - isLeave: true, - }, + where: { isLeave: true }, + select: ["id"], }); - - for (const item of profiles) { - const posmaster = await this.posMasterRepo.findOne({ + const profileIds = profiles.map((p) => p.id); + if (profileIds.length > 0) { + const posmasters = await this.posMasterRepo.find({ where: { orgRevision: { orgRevisionIsCurrent: false, orgRevisionIsDraft: true, }, - next_holderId: item.id, + next_holderId: In(profileIds), }, }); - if (!posmaster) continue; - posmaster.next_holderId = null; - await this.posMasterRepo.save(posmaster); + for (const posmaster of posmasters) { + posmaster.next_holderId = null; + } + if (posmasters.length > 0) { + await this.posMasterRepo.save(posmasters); + } } const profileEmps = await this.profileEmpRepo.find({ - where: { - isLeave: true, - }, + where: { isLeave: true }, + select: ["id"], }); - - for (const item of profileEmps) { - const posmaster = await this.posMasterEmpRepo.findOne({ + const profileEmpIds = profileEmps.map((p) => p.id); + if (profileEmpIds.length > 0) { + const posmasterEmps = await this.posMasterEmpRepo.find({ where: { orgRevision: { orgRevisionIsCurrent: false, orgRevisionIsDraft: true, }, - next_holderId: item.id, + next_holderId: In(profileEmpIds), }, }); - if (!posmaster) continue; - posmaster.next_holderId = null; - await this.posMasterEmpRepo.save(posmaster); + for (const posmasterEmp of posmasterEmps) { + posmasterEmp.next_holderId = null; + } + if (posmasterEmps.length > 0) { + await this.posMasterEmpRepo.save(posmasterEmps); + } } return new HttpSuccess(); }