From 964e938bb2cec6d7e4658e6b7920d71dfaa26701 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Thu, 19 Dec 2024 12:41:48 +0700 Subject: [PATCH 1/6] fix #857 --- .../DevelopmentEmployeeHistoryController.ts | 9 +++++ .../DevelopmentHistoryController.ts | 34 ++++++++++++++----- src/entities/DevelopmentOther.ts | 2 +- ...1-update_devorder_add_relation_province.ts | 14 -------- ...pdate_development_add_relation_province.ts | 14 ++++++++ 5 files changed, 49 insertions(+), 24 deletions(-) delete mode 100644 src/migration/1734583427091-update_devorder_add_relation_province.ts create mode 100644 src/migration/1734586571465-update_development_add_relation_province.ts diff --git a/src/controllers/DevelopmentEmployeeHistoryController.ts b/src/controllers/DevelopmentEmployeeHistoryController.ts index 65dadc1..2d35b66 100644 --- a/src/controllers/DevelopmentEmployeeHistoryController.ts +++ b/src/controllers/DevelopmentEmployeeHistoryController.ts @@ -360,10 +360,18 @@ export class DevelopmentEmployeeHistoryController extends Controller { relations: [ "development", "development.developmentOthers", + "development.developmentOthers.province", "employeePosLevel", "employeePosType", ], where: { id: id, type: type }, + order: { + development:{ + developmentOthers: { + createdAt: "ASC" + } + } + } }); if (!getDevelopment) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); @@ -408,6 +416,7 @@ export class DevelopmentEmployeeHistoryController extends Controller { ? getDevelopment.development.developmentOthers.map((dev) => ({ topicAcademic: dev.topicAcademic, addressAcademic: dev.addressAcademic, + Province: dev.province.name })) : [], }; diff --git a/src/controllers/DevelopmentHistoryController.ts b/src/controllers/DevelopmentHistoryController.ts index 368858f..c8589df 100644 --- a/src/controllers/DevelopmentHistoryController.ts +++ b/src/controllers/DevelopmentHistoryController.ts @@ -27,6 +27,7 @@ import { PosLevel } from "../entities/PosLevel"; import { RequestWithUser } from "../middlewares/user"; import { setLogDataDiff } from "../interfaces/utils"; import permission from "../interfaces/permission"; +import { Province } from "../entities/Province"; @Route("api/v1/development/history/officer") @Tags("DevelopmentOfficerHistory") @@ -321,9 +322,10 @@ export class DevelopmentOfficerHistoryController extends Controller { const formattedData = development.map((item) => ({ id: item.id, citizenId: item.citizenId, - fullName: item.prefix == null && item.firstName == null && item.lastName == null - ? "" - : `${item?.prefix}${item?.firstName} ${item?.lastName}`, + fullName: + item.prefix == null && item.firstName == null && item.lastName == null + ? "" + : `${item?.prefix}${item?.firstName} ${item?.lastName}`, position: item.position, year: item.development.year, root: item.development.root, //test @@ -350,8 +352,21 @@ export class DevelopmentOfficerHistoryController extends Controller { await new permission().PermissionGet(request, "SYS_DEV_HISTORY_OFFICER"); const type = "OFFICER"; const getDevelopment = await this.developmentHistoryRepository.findOne({ - relations: ["development", "development.developmentOthers","posLevel", "posType"], + relations: [ + "development", + "development.developmentOthers", + "development.developmentOthers.province", + "posLevel", + "posType", + ], where: { id: id, type: type }, + order: { + development: { + developmentOthers: { + createdAt: "ASC", + }, + }, + }, }); if (!getDevelopment) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลประวัติการฝึกอบรม/ดูงานนี้"); @@ -389,12 +404,13 @@ export class DevelopmentOfficerHistoryController extends Controller { getDevelopment.development != null ? getDevelopment.development.dateStudyStart : null, dateStudyEnd: getDevelopment.development != null ? getDevelopment.development.dateStudyEnd : null, - academic: getDevelopment.development?.developmentOthers - ? getDevelopment.development.developmentOthers.map(dev => ({ + academic: getDevelopment.development?.developmentOthers + ? getDevelopment.development.developmentOthers.map((dev) => ({ topicAcademic: dev.topicAcademic, - addressAcademic: dev.addressAcademic - })) - : [] + addressAcademic: dev.addressAcademic, + Province: dev.province.name, + })) + : [], }; return new HttpSuccess(formattedData); diff --git a/src/entities/DevelopmentOther.ts b/src/entities/DevelopmentOther.ts index 0e627f0..7cf0da1 100644 --- a/src/entities/DevelopmentOther.ts +++ b/src/entities/DevelopmentOther.ts @@ -38,7 +38,7 @@ export class DevelopmentOther extends EntityBase { development: Development; @ManyToOne(() => Province, (province: Province) => province.developmentOthers) - @JoinColumn({ name: "developmentId" }) + @JoinColumn({ name: "provinceActualId" }) province: Province; } diff --git a/src/migration/1734583427091-update_devorder_add_relation_province.ts b/src/migration/1734583427091-update_devorder_add_relation_province.ts deleted file mode 100644 index 9084218..0000000 --- a/src/migration/1734583427091-update_devorder_add_relation_province.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class UpdateDevorderAddRelationProvince1734583427091 implements MigrationInterface { - name = 'UpdateDevorderAddRelationProvince1734583427091' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`developmentOther\` ADD CONSTRAINT \`FK_d5dfdb7ca0d11c0cdf3b3a55e6f\` FOREIGN KEY (\`developmentId\`) REFERENCES \`province\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`developmentOther\` DROP FOREIGN KEY \`FK_d5dfdb7ca0d11c0cdf3b3a55e6f\``); - } - -} diff --git a/src/migration/1734586571465-update_development_add_relation_province.ts b/src/migration/1734586571465-update_development_add_relation_province.ts new file mode 100644 index 0000000..6b37a7f --- /dev/null +++ b/src/migration/1734586571465-update_development_add_relation_province.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateDevelopmentAddRelationProvince1734586571465 implements MigrationInterface { + name = 'UpdateDevelopmentAddRelationProvince1734586571465' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`developmentOther\` ADD CONSTRAINT \`FK_47bbbecaea9b7b31d2536054656\` FOREIGN KEY (\`provinceActualId\`) REFERENCES \`province\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`developmentOther\` DROP FOREIGN KEY \`FK_47bbbecaea9b7b31d2536054656\``); + } + +} From d00e64d7df04db60766361b71104b29bbcd580c2 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Thu, 19 Dec 2024 12:57:14 +0700 Subject: [PATCH 2/6] no message --- src/controllers/DevelopmentEmployeeHistoryController.ts | 2 +- src/controllers/DevelopmentHistoryController.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/DevelopmentEmployeeHistoryController.ts b/src/controllers/DevelopmentEmployeeHistoryController.ts index 2d35b66..3d152ea 100644 --- a/src/controllers/DevelopmentEmployeeHistoryController.ts +++ b/src/controllers/DevelopmentEmployeeHistoryController.ts @@ -416,7 +416,7 @@ export class DevelopmentEmployeeHistoryController extends Controller { ? getDevelopment.development.developmentOthers.map((dev) => ({ topicAcademic: dev.topicAcademic, addressAcademic: dev.addressAcademic, - Province: dev.province.name + province: dev.province.name })) : [], }; diff --git a/src/controllers/DevelopmentHistoryController.ts b/src/controllers/DevelopmentHistoryController.ts index c8589df..dec3501 100644 --- a/src/controllers/DevelopmentHistoryController.ts +++ b/src/controllers/DevelopmentHistoryController.ts @@ -408,7 +408,7 @@ export class DevelopmentOfficerHistoryController extends Controller { ? getDevelopment.development.developmentOthers.map((dev) => ({ topicAcademic: dev.topicAcademic, addressAcademic: dev.addressAcademic, - Province: dev.province.name, + province: dev.province.name, })) : [], }; From fe9eca9b33ca4c8451605c580ecd6c43d3d6e2c3 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Thu, 19 Dec 2024 13:26:30 +0700 Subject: [PATCH 3/6] #857 (9) --- src/controllers/DevelopmentController.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/controllers/DevelopmentController.ts b/src/controllers/DevelopmentController.ts index 2364ddc..a5d6fdf 100644 --- a/src/controllers/DevelopmentController.ts +++ b/src/controllers/DevelopmentController.ts @@ -59,6 +59,7 @@ import { RequestWithUser } from "../middlewares/user"; import { DevelopmentRisk, UpdateDevelopmentRisk } from "../entities/DevelopmentRisk"; import { DevelopmentOther, UpdateDevelopmentOther } from "../entities/DevelopmentOther"; import permission from "../interfaces/permission"; +import { Brackets } from "typeorm"; @Route("api/v1/development/main") @Tags("Development") @@ -1941,9 +1942,21 @@ export class DevelopmentController extends Controller { .andWhere(status != undefined ? "development.status LIKE :status" : "1=1", { status: `%${status}%`, }) - .andWhere(keyword != undefined ? "development.projectName LIKE :keyword" : "1=1", { - keyword: `%${keyword}%`, - }) + .andWhere( + keyword != undefined + ? new Brackets ((qb) => { + qb.where("development.projectName LIKE :keyword") + .orWhere("development.root LIKE :keyword") + .orWhere("development.child1 LIKE :keyword") + .orWhere("development.child2 LIKE :keyword") + .orWhere("development.child3 LIKE :keyword") + .orWhere("development.child4 LIKE :keyword"); + }) + : "1=1", + { + keyword: `%${keyword}%`, + }, + ) .select([ "development.id", "development.projectName", From e094c0ad07ed16365054cc6db47d523250703f8b Mon Sep 17 00:00:00 2001 From: Bright Date: Thu, 19 Dec 2024 17:00:41 +0700 Subject: [PATCH 4/6] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=97?= =?UTF-8?q?=E0=B8=B0=E0=B9=80=E0=B8=9A=E0=B8=B5=E0=B8=A2=E0=B8=99=E0=B8=9B?= =?UTF-8?q?=E0=B8=A3=E0=B8=B0=E0=B8=A7=E0=B8=B1=E0=B8=95=E0=B8=B4=20Indivi?= =?UTF-8?q?dual=20Development=20Plan=20#875?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/DevelopmentController.ts | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/controllers/DevelopmentController.ts b/src/controllers/DevelopmentController.ts index a5d6fdf..2e9bd9c 100644 --- a/src/controllers/DevelopmentController.ts +++ b/src/controllers/DevelopmentController.ts @@ -2606,6 +2606,58 @@ export class DevelopmentController extends Controller { return new HttpSuccess(getOrg); } + @Get("registry/{type}/{developmentId}") + async developmentDetail( + @Path() developmentId: string, + @Path() type: string, + @Request() request: RequestWithUser + ) { + const getDevelopment = await this.developmentRepository.findOne({ + where: { id: developmentId }, + relations: [ + "developmentProjectTypes", + "developmentProjectTechniquePlanneds", + "developmentProjectTechniqueActuals", + "developmentAddresss", + ], + }); + if (!getDevelopment) + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงการ/หลักสูตรการฝึกอบรมนี้"); + + if (type.trim().toLocaleUpperCase() == "OFFICER") { + let _workflow = await new permission().Workflow(request, developmentId, "SYS_REGISTRY_OFFICER"); + if (_workflow == false) await new permission().PermissionGet(request, "SYS_REGISTRY_OFFICER"); + } else if (type.trim().toLocaleUpperCase() == "USER") { + } else { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถเข้าถึงข้อมูลนี้ได้"); + } + + let _getDevelopment: any = { + id: getDevelopment.id, + evaluationId: null, + target: null, + summary: null, + point: null, + name: getDevelopment.projectName, + achievement10: "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน1", + achievement5: "มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน", + achievement0: "ไม่ได้ดำเนินการพัฒนา", + isDevelopment70: getDevelopment.isReasonActual70, + isDevelopment20: getDevelopment.isReasonActual20, + isDevelopment10: getDevelopment.isReasonActual10, + reasonDevelopment70: getDevelopment.reasonActual70, + reasonDevelopment20: getDevelopment.reasonActual20, + reasonDevelopment10: getDevelopment.reasonActual10, + selectType: "PROJECT", + selectTypeYear: getDevelopment.year, + selectTypeId: null, + developmentProjects : getDevelopment.developmentProjectTechniqueActuals + .map((x) => x.name) + .sort(), + }; + return new HttpSuccess(_getDevelopment); + } + /** * API upload User * From 03e6a62c0a585f5a02d0822b48f8cfed3c846de4 Mon Sep 17 00:00:00 2001 From: Bright Date: Thu, 19 Dec 2024 17:32:00 +0700 Subject: [PATCH 5/6] no message --- src/controllers/DevelopmentController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/DevelopmentController.ts b/src/controllers/DevelopmentController.ts index 2e9bd9c..f2b456a 100644 --- a/src/controllers/DevelopmentController.ts +++ b/src/controllers/DevelopmentController.ts @@ -2639,7 +2639,7 @@ export class DevelopmentController extends Controller { summary: null, point: null, name: getDevelopment.projectName, - achievement10: "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน1", + achievement10: "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน", achievement5: "มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน", achievement0: "ไม่ได้ดำเนินการพัฒนา", isDevelopment70: getDevelopment.isReasonActual70, From 3f988d8bb62603d63eecc86d61f15170532ec107 Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 20 Dec 2024 10:03:51 +0700 Subject: [PATCH 6/6] edit log --- src/middlewares/logs.ts | 2 +- ...465-update_development_add_relation_province.ts | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 src/migration/1734586571465-update_development_add_relation_province.ts diff --git a/src/middlewares/logs.ts b/src/middlewares/logs.ts index b1d83ba..fb2b6e2 100644 --- a/src/middlewares/logs.ts +++ b/src/middlewares/logs.ts @@ -60,7 +60,7 @@ async function logMiddleware(req: Request, res: Response, next: NextFunction) { logType: res.statusCode >= 500 ? "error" : res.statusCode >= 400 ? "warning" : "info", ip: req.ip, rootId: rootId?.orgRootId ?? null, - systemName: "evaluation", + systemName: "development", startTimeStamp: timestamp, endTimeStamp: new Date().toISOString(), processTime: performance.now() - start, diff --git a/src/migration/1734586571465-update_development_add_relation_province.ts b/src/migration/1734586571465-update_development_add_relation_province.ts deleted file mode 100644 index 6b37a7f..0000000 --- a/src/migration/1734586571465-update_development_add_relation_province.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class UpdateDevelopmentAddRelationProvince1734586571465 implements MigrationInterface { - name = 'UpdateDevelopmentAddRelationProvince1734586571465' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`developmentOther\` ADD CONSTRAINT \`FK_47bbbecaea9b7b31d2536054656\` FOREIGN KEY (\`provinceActualId\`) REFERENCES \`province\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`developmentOther\` DROP FOREIGN KEY \`FK_47bbbecaea9b7b31d2536054656\``); - } - -}