From f1f38ca3eb594d6cadc34771102166974417d52d Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 11:22:58 +0700 Subject: [PATCH 01/12] fix report & comment --- src/controllers/ImportDataController.ts | 6 ++--- src/controllers/ReportController.ts | 34 ++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/controllers/ImportDataController.ts b/src/controllers/ImportDataController.ts index 9787469d..d4f3fe24 100644 --- a/src/controllers/ImportDataController.ts +++ b/src/controllers/ImportDataController.ts @@ -47,7 +47,7 @@ import { OFFICER } from "../entities/OFFICER"; import { Position } from "../entities/Position"; import { PosMaster } from "../entities/PosMaster"; import { positionOfficer } from "../entities/positionOfficer"; -import { uuidv7 } from "uuidv7"; +// import { uuidv7 } from "uuidv7"; @Route("api/v1/org/upload") @Tags("UPLOAD") @Security("bearerAuth") @@ -578,8 +578,8 @@ export class ImportDataController extends Controller { profileSalary.lastUpdateFullName = request.user.name; profileSalary.createdAt = new Date(); profileSalary.lastUpdatedAt = new Date(); - const result = uuidv7(); - profileSalary.id = result; + // const result = uuidv7(); + // profileSalary.id = result; // console.log(">>>>>>>>>>>>>>>>>>>" + rowCount); // // Generate SQL INSERT Statement using TypeORM QueryBuilder but don't execute it diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 9b117424..6ee53ccd 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -177,12 +177,12 @@ export class ReportController extends Controller { @Query() posType?: string, @Query() posLevel?: string, @Query() position?: string, - @Query() posExecutiveName?: string, + @Query() positionExecutive?: string, @Query() gender?: string, @Query() status?: string, @Query() education?: string, - @Query() startDateAppoint?: Date, - @Query() endDateAppoint?: Date, + @Query() dateStart?: Date, + @Query() dateEnd?: Date, @Query() ageMin?: number, @Query() ageMax?: number, @Query() isProbation?: boolean, @@ -216,12 +216,12 @@ export class ReportController extends Controller { nodeCondition = "registryOfficer.orgChild4Id = :nodeId"; } let dateAppointCondition = "1=1"; - if (startDateAppoint && endDateAppoint) { + if (dateStart && dateEnd) { dateAppointCondition = "DATE(registryOfficer.dateAppoint) >= :startDateAppoint AND DATE(registryOfficer.dateAppoint) <= :endDateAppoint"; - } else if (startDateAppoint) { + } else if (dateStart) { dateAppointCondition = "DATE(registryOfficer.dateAppoint) >= :startDateAppoint"; - } else if (endDateAppoint) { + } else if (dateEnd) { dateAppointCondition = "DATE(registryOfficer.dateAppoint) <= :endDateAppoint"; } @@ -243,8 +243,8 @@ export class ReportController extends Controller { ageMax, }) .andWhere(dateAppointCondition, { - startDateAppoint: startDateAppoint?.toISOString().split("T")[0], - endDateAppoint: endDateAppoint?.toISOString().split("T")[0], + startDateAppoint: dateStart?.toISOString().split("T")[0], + endDateAppoint: dateEnd?.toISOString().split("T")[0], }) .andWhere("registryOfficer.isProbation = :isProbation", { isProbation: isProbation, @@ -275,11 +275,11 @@ export class ReportController extends Controller { } ) .andWhere( - posExecutiveName != null && posExecutiveName != "" + positionExecutive != null && positionExecutive != "" ? "registryOfficer.posExecutiveName LIKE :posExecutiveName" : "1=1", { - posExecutiveName: `%${posExecutiveName}%`, + posExecutiveName: `%${positionExecutive}%`, } ) .andWhere( @@ -477,8 +477,8 @@ export class ReportController extends Controller { @Query() gender?: string, @Query() status?: string, @Query() education?: string, - @Query() startDateAppoint?: Date, - @Query() endDateAppoint?: Date, + @Query() dateStart?: Date, + @Query() dateEnd?: Date, @Query() isProbation?: boolean, @Query() isRetire?: boolean, @Query() retireType?: string, @@ -512,12 +512,12 @@ export class ReportController extends Controller { nodeCondition = "registryEmployee.orgChild4Id = :nodeId"; } let dateAppointCondition = "1=1"; - if (startDateAppoint && endDateAppoint) { + if (dateStart && dateEnd) { dateAppointCondition = "DATE(registryEmployee.dateAppoint) >= :startDateAppoint AND DATE(registryEmployee.dateAppoint) <= :endDateAppoint"; - } else if (startDateAppoint) { + } else if (dateStart) { dateAppointCondition = "DATE(registryEmployee.dateAppoint) >= :startDateAppoint"; - } else if (endDateAppoint) { + } else if (dateEnd) { dateAppointCondition = "DATE(registryEmployee.dateAppoint) <= :endDateAppoint"; } @@ -538,8 +538,8 @@ export class ReportController extends Controller { ageMax, }) .andWhere(dateAppointCondition, { - startDateAppoint: startDateAppoint?.toISOString().split("T")[0], - endDateAppoint: endDateAppoint?.toISOString().split("T")[0], + startDateAppoint: dateStart?.toISOString().split("T")[0], + endDateAppoint: dateEnd?.toISOString().split("T")[0], }) .andWhere("registryEmployee.isProbation = :isProbation", { isProbation: isProbation, From 89d2610cd9aa02e31b7a5a89f101d18dccd8d071 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Mon, 24 Feb 2025 11:41:46 +0700 Subject: [PATCH 02/12] checkpoint --- src/services/rabbitmq.ts | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 1035e842..12d755f1 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -11,11 +11,12 @@ import { Profile } from "../entities/Profile"; export let sendToQueue: (payload: any) => void; export let sendToQueueOrg: (payload: any) => void; +export let sendToQueueOrgReport: (payload: any) => void; export async function init() { //----> (1) Producer - if (!process.env.AMQ_URL || !process.env.AMQ_QUEUE || !process.env.AMQ_QUEUE_ORG) return; + if (!process.env.AMQ_URL || !process.env.AMQ_QUEUE || !process.env.AMQ_QUEUE_ORG || !process.env.AMQ_QUEUE_REPORT) return; - const { AMQ_URL: url, AMQ_QUEUE: queue, AMQ_QUEUE_ORG: queue_org } = process.env; //----> (1.2) get url and queue from .env + const { AMQ_URL: url, AMQ_QUEUE: queue, AMQ_QUEUE_ORG: queue_org, AMQ_QUEUE_REPORT: queue_org_report } = process.env; //----> (1.2) get url and queue from .env const connection = await amqp.connect(url); //----> (1.3) set up url with amqp protocol @@ -40,9 +41,14 @@ export async function init() { channel.sendToQueue(queue_org, Buffer.from(JSON.stringify(payload)), { persistent }); }; + sendToQueueOrgReport = (payload: any, persistent = true) => { + channel.sendToQueue(queue_org_report, Buffer.from(JSON.stringify(payload)), { persistent }); + }; + console.log("[AMQ] Listening for message..."); createConsumer(queue, channel, handler), //----> (3) Process Consumer - createConsumer(queue_org, channel, handler_org); + createConsumer(queue_org, channel, handler_org); + createConsumer(queue_org_report, channel, handler_org_report); // createConsumer(queue2, channel, handler2); } @@ -172,3 +178,17 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { return false; } } + +async function handler_org_report(msg: amqp.ConsumeMessage): Promise { + //----> condition before process consume + const { data, token, user } = JSON.parse(msg.content.toString()); + const { id, status, lastUpdateUserId, lastUpdateFullName, lastUpdatedAt } = data; + try { + + console.log("[AMQ] Excecute Organization Success"); + return true; + } catch (error) { + console.error(error); + return false; + } +} From 64470b67a171f84f090bd937f805d2f0f2724478 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 11:50:52 +0700 Subject: [PATCH 03/12] no message --- src/controllers/ReportController.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 6ee53ccd..5ec3e5f3 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -191,6 +191,13 @@ export class ReportController extends Controller { @Query() sortBy: string = "posMasterNo", @Query() sort: "ASC" | "DESC" = "ASC", ) { + const _null: any = null; + if(!dateStart) { + dateStart = _null + } + if(!dateEnd) { + dateEnd = _null + } if (ageMin && (ageMin < 18 || ageMin > 60)) { throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60"); } @@ -487,6 +494,13 @@ export class ReportController extends Controller { @Query() sortBy: string = "posMasterNo", @Query() sort: "ASC" | "DESC" = "ASC", ) { + const _null: any = null; + if(!dateStart) { + dateStart = _null + } + if(!dateEnd) { + dateEnd = _null + } if (ageMin && (ageMin < 18 || ageMin > 60)) { throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60"); } From 6f6b6bba43a2106b785ee3e1e1b17b3b884691d3 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 12:16:47 +0700 Subject: [PATCH 04/12] migrate --- src/entities/view/viewRegistryEmployee.ts | 2 + src/entities/view/viewRegistryOfficer.ts | 2 + ...06-updateViewRegistryOfficerAndEmployee.ts | 424 ++++++++++++++++++ 3 files changed, 428 insertions(+) create mode 100644 src/migration/1740373723906-updateViewRegistryOfficerAndEmployee.ts diff --git a/src/entities/view/viewRegistryEmployee.ts b/src/entities/view/viewRegistryEmployee.ts index c2d46732..aad557c8 100644 --- a/src/entities/view/viewRegistryEmployee.ts +++ b/src/entities/view/viewRegistryEmployee.ts @@ -89,6 +89,8 @@ import { ViewColumn, ViewEntity } from "typeorm"; p.gender, p.relationship, p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, p.birthdate, ed.degree, TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age diff --git a/src/entities/view/viewRegistryOfficer.ts b/src/entities/view/viewRegistryOfficer.ts index e52aa7dc..548e7399 100644 --- a/src/entities/view/viewRegistryOfficer.ts +++ b/src/entities/view/viewRegistryOfficer.ts @@ -93,6 +93,8 @@ import { ViewColumn, ViewEntity } from "typeorm"; p.gender, p.relationship, p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, p.birthdate, ed.degree, TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age diff --git a/src/migration/1740373723906-updateViewRegistryOfficerAndEmployee.ts b/src/migration/1740373723906-updateViewRegistryOfficerAndEmployee.ts new file mode 100644 index 00000000..594497a6 --- /dev/null +++ b/src/migration/1740373723906-updateViewRegistryOfficerAndEmployee.ts @@ -0,0 +1,424 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateViewRegistryOfficerAndEmployee1740373723906 implements MigrationInterface { + name = 'UpdateViewRegistryOfficerAndEmployee1740373723906' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_employee\``); + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_officer\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP FOREIGN KEY \`FK_f1ded3e1f83ab2437f739a14f38\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD CONSTRAINT \`FK_f1ded3e1f83ab2437f739a14f38\` FOREIGN KEY (\`profileSalaryId\`) REFERENCES \`profileSalary\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`); + await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS + WITH Position AS ( + SELECT + posExecutive.posExecutiveName, + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM position pn + LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + pn.posExecutiveName, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM posMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE + orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + pm.posExecutiveName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profile p + LEFT JOIN posLevel ON p.posLevelId = posLevel.id + LEFT JOIN posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1 + `); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]); + await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS + WITH Position AS ( + SELECT + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM employeePosition pn + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM employeePosMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileEmployeeId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileEmployeeId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + p.employeeClass, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profileEmployee p + LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id + LEFT JOIN employeePosType posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1 + `); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_employee\``); + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_officer\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP FOREIGN KEY \`FK_f1ded3e1f83ab2437f739a14f38\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD CONSTRAINT \`FK_f1ded3e1f83ab2437f739a14f38\` FOREIGN KEY (\`profileSalaryId\`) REFERENCES \`profileSalary\`(\`id\`) ON DELETE RESTRICT ON UPDATE RESTRICT`); + await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS WITH Position AS ( + SELECT + posExecutive.posExecutiveName, + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM position pn + LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + pn.posExecutiveName, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM posMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE + orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + pm.posExecutiveName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profile p + LEFT JOIN posLevel ON p.posLevelId = posLevel.id + LEFT JOIN posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1`); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]); + await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS WITH Position AS ( + SELECT + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM employeePosition pn + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM employeePosMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileEmployeeId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileEmployeeId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + p.employeeClass, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profileEmployee p + LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id + LEFT JOIN employeePosType posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1`); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]); + } + +} From 7a3085c57f278d857257276ae37a031ac7651c93 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 14:08:11 +0700 Subject: [PATCH 05/12] add dateRetireLaw --- src/controllers/ReportController.ts | 41 ++++++++++++++++++----- src/entities/view/viewRegistryEmployee.ts | 6 ++++ src/entities/view/viewRegistryOfficer.ts | 6 ++++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 5ec3e5f3..644031af 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -187,6 +187,7 @@ export class ReportController extends Controller { @Query() ageMax?: number, @Query() isProbation?: boolean, @Query() isRetire?: boolean, + @Query() isRetireLaw?: boolean, @Query() retireType?: string, @Query() sortBy: string = "posMasterNo", @Query() sort: "ASC" | "DESC" = "ASC", @@ -234,12 +235,17 @@ export class ReportController extends Controller { const IsLeavecondition = ["registryOfficer.isLeave = :isLeave"]; const parameters: any = { isLeave: isRetire }; - if (retireType && retireType.trim() !== "") { IsLeavecondition.push("registryOfficer.leaveType = :retireType"); parameters.retireType = retireType; } + let retireLawCondition = "1=1"; + if(isRetireLaw) { + retireLawCondition = + "DATE(registryOfficer.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryOfficer.dateRetireLaw) <= :endDateRetireLaw"; + } + const [lists, total] = await AppDataSource.getRepository(viewRegistryOfficer) .createQueryBuilder("registryOfficer") .where(nodeCondition, { @@ -253,6 +259,10 @@ export class ReportController extends Controller { startDateAppoint: dateStart?.toISOString().split("T")[0], endDateAppoint: dateEnd?.toISOString().split("T")[0], }) + .andWhere(retireLawCondition, { + startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)?.toISOString().split("T")[0], + endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999).toISOString().split("T")[0], + }) .andWhere("registryOfficer.isProbation = :isProbation", { isProbation: isProbation, }) @@ -345,6 +355,8 @@ export class ReportController extends Controller { gender: x.gender, relationship: x.relationship, dateAppoint: x.dateAppoint, + dateRetire: x.dateRetire, + dateRetireLaw: x.dateRetireLaw, birthdate: x.birthdate, degree: x.degree, age: x.age, @@ -488,6 +500,7 @@ export class ReportController extends Controller { @Query() dateEnd?: Date, @Query() isProbation?: boolean, @Query() isRetire?: boolean, + @Query() isRetireLaw?: boolean, @Query() retireType?: string, @Query() ageMin?: number, @Query() ageMax?: number, @@ -537,11 +550,17 @@ export class ReportController extends Controller { const IsLeavecondition = ["registryEmployee.isLeave = :isLeave"]; const parameters: any = { isLeave: isRetire }; - if (retireType && retireType.trim() !== "") { IsLeavecondition.push("registryEmployee.leaveType = :retireType"); parameters.retireType = retireType; } + + let retireLawCondition = "1=1"; + if(isRetireLaw) { + retireLawCondition = + "DATE(registryEmployee.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryEmployee.dateRetireLaw) <= :endDateRetireLaw"; + } + const [lists, total] = await AppDataSource.getRepository(viewRegistryEmployee) .createQueryBuilder("registryEmployee") .where(nodeCondition, { @@ -555,6 +574,10 @@ export class ReportController extends Controller { startDateAppoint: dateStart?.toISOString().split("T")[0], endDateAppoint: dateEnd?.toISOString().split("T")[0], }) + .andWhere(retireLawCondition, { + startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)?.toISOString().split("T")[0], + endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999).toISOString().split("T")[0], + }) .andWhere("registryEmployee.isProbation = :isProbation", { isProbation: isProbation, }) @@ -562,7 +585,7 @@ export class ReportController extends Controller { .andWhere("registryEmployee.employeeClass = 'PERM'") .andWhere( posType != null && posType != "" - ? "registryOfficer.posTypeName LIKE :posTypeName" + ? "registryEmployee.posTypeName LIKE :posTypeName" : "1=1", { posTypeName: `%${posType}%`, @@ -570,7 +593,7 @@ export class ReportController extends Controller { ) .andWhere( posLevel != null && posLevel != "" - ? "registryOfficer.posLevelName LIKE :posLevelName" + ? "registryEmployee.posLevelName LIKE :posLevelName" : "1=1", { posLevelName: `%${posLevel}%`, @@ -578,7 +601,7 @@ export class ReportController extends Controller { ) .andWhere( position != null && position != "" - ? "registryOfficer.position LIKE :position" + ? "registryEmployee.position LIKE :position" : "1=1", { position: `%${position}%`, @@ -586,7 +609,7 @@ export class ReportController extends Controller { ) .andWhere( gender != null && gender != "" - ? "registryOfficer.gender LIKE :gender" + ? "registryEmployee.gender LIKE :gender" : "1=1", { gender: `%${gender}%`, @@ -594,7 +617,7 @@ export class ReportController extends Controller { ) .andWhere( status != null && status != "" - ? "registryOfficer.relationship LIKE :relationship" + ? "registryEmployee.relationship LIKE :relationship" : "1=1", { relationship: `%${status}%`, @@ -602,7 +625,7 @@ export class ReportController extends Controller { ) .andWhere( education != null && education != "" - ? "registryOfficer.degree LIKE :degree" + ? "registryEmployee.degree LIKE :degree" : "1=1", { degree: `%${education}%`, @@ -639,6 +662,8 @@ export class ReportController extends Controller { gender: x.gender, relationship: x.relationship, dateAppoint: x.dateAppoint, + dateRetire: x.dateRetire, + dateRetireLaw: x.dateRetireLaw, birthdate: x.birthdate, degree: x.degree, age: x.age, diff --git a/src/entities/view/viewRegistryEmployee.ts b/src/entities/view/viewRegistryEmployee.ts index aad557c8..0ce1b8e0 100644 --- a/src/entities/view/viewRegistryEmployee.ts +++ b/src/entities/view/viewRegistryEmployee.ts @@ -185,6 +185,12 @@ export class viewRegistryEmployee { @ViewColumn() dateAppoint: Date; + + @ViewColumn() + dateRetire: Date; + + @ViewColumn() + dateRetireLaw: Date; @ViewColumn() birthdate: Date; diff --git a/src/entities/view/viewRegistryOfficer.ts b/src/entities/view/viewRegistryOfficer.ts index 548e7399..519743c9 100644 --- a/src/entities/view/viewRegistryOfficer.ts +++ b/src/entities/view/viewRegistryOfficer.ts @@ -193,6 +193,12 @@ export class viewRegistryOfficer { @ViewColumn() dateAppoint: Date; + @ViewColumn() + dateRetire: Date; + + @ViewColumn() + dateRetireLaw: Date; + @ViewColumn() birthdate: Date; From 872584c0d6eba9e25e6f99e2f3b5e744012a0751 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Mon, 24 Feb 2025 14:47:09 +0700 Subject: [PATCH 06/12] comment rabbit --- src/services/rabbitmq.ts | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index d394844c..7b1d35dd 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -11,12 +11,11 @@ import { Profile } from "../entities/Profile"; export let sendToQueue: (payload: any) => void; export let sendToQueueOrg: (payload: any) => void; -export let sendToQueueOrgReport: (payload: any) => void; export async function init() { //----> (1) Producer - if (!process.env.AMQ_URL || !process.env.AMQ_QUEUE || !process.env.AMQ_QUEUE_ORG || !process.env.AMQ_QUEUE_REPORT) return; + if (!process.env.AMQ_URL || !process.env.AMQ_QUEUE || !process.env.AMQ_QUEUE_ORG) return; - const { AMQ_URL: url, AMQ_QUEUE: queue, AMQ_QUEUE_ORG: queue_org, AMQ_QUEUE_REPORT: queue_org_report } = process.env; //----> (1.2) get url and queue from .env + const { AMQ_URL: url, AMQ_QUEUE: queue, AMQ_QUEUE_ORG: queue_org } = process.env; //----> (1.2) get url and queue from .env const connection = await amqp.connect(url); //----> (1.3) set up url with amqp protocol @@ -41,14 +40,9 @@ export async function init() { channel.sendToQueue(queue_org, Buffer.from(JSON.stringify(payload)), { persistent }); }; - sendToQueueOrgReport = (payload: any, persistent = true) => { - channel.sendToQueue(queue_org_report, Buffer.from(JSON.stringify(payload)), { persistent }); - }; - console.log("[AMQ] Listening for message..."); createConsumer(queue, channel, handler), //----> (3) Process Consumer createConsumer(queue_org, channel, handler_org); - createConsumer(queue_org_report, channel, handler_org_report); // createConsumer(queue2, channel, handler2); } @@ -180,16 +174,3 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { } } -async function handler_org_report(msg: amqp.ConsumeMessage): Promise { - //----> condition before process consume - const { data, token, user } = JSON.parse(msg.content.toString()); - const { id, status, lastUpdateUserId, lastUpdateFullName, lastUpdatedAt } = data; - try { - - console.log("[AMQ] Excecute Organization Success"); - return true; - } catch (error) { - console.error(error); - return false; - } -} From 0062f0df0a524fd469b5b0d27f7bf56d9b932899 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 14:49:30 +0700 Subject: [PATCH 07/12] update view --- src/entities/view/viewRegistryEmployee.ts | 4 +- src/entities/view/viewRegistryOfficer.ts | 2 +- ...740382878673-updateViewRegistryEmployee.ts | 424 ++++++++++++++++++ 3 files changed, 427 insertions(+), 3 deletions(-) create mode 100644 src/migration/1740382878673-updateViewRegistryEmployee.ts diff --git a/src/entities/view/viewRegistryEmployee.ts b/src/entities/view/viewRegistryEmployee.ts index 0ce1b8e0..c27f869c 100644 --- a/src/entities/view/viewRegistryEmployee.ts +++ b/src/entities/view/viewRegistryEmployee.ts @@ -47,7 +47,7 @@ import { ViewColumn, ViewEntity } from "typeorm"; ed.degree, ed.profileEmployeeId, ed.level, - ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number + ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number FROM profileEducation ed WHERE ed.isUse IS TRUE ORDER BY ed.level ASC @@ -85,7 +85,7 @@ import { ViewColumn, ViewEntity } from "typeorm"; pm.searchShortName, p.position, posType.posTypeName, - posLevel.posLevelName, + CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName", p.gender, p.relationship, p.dateAppoint, diff --git a/src/entities/view/viewRegistryOfficer.ts b/src/entities/view/viewRegistryOfficer.ts index 519743c9..b60ed1cb 100644 --- a/src/entities/view/viewRegistryOfficer.ts +++ b/src/entities/view/viewRegistryOfficer.ts @@ -51,7 +51,7 @@ import { ViewColumn, ViewEntity } from "typeorm"; ed.degree, ed.profileId, ed.level, - ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number + ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number FROM profileEducation ed WHERE ed.isUse IS TRUE ORDER BY ed.level ASC diff --git a/src/migration/1740382878673-updateViewRegistryEmployee.ts b/src/migration/1740382878673-updateViewRegistryEmployee.ts new file mode 100644 index 00000000..e0b4c4f9 --- /dev/null +++ b/src/migration/1740382878673-updateViewRegistryEmployee.ts @@ -0,0 +1,424 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateViewRegistryEmployee1740382878673 implements MigrationInterface { + name = 'UpdateViewRegistryEmployee1740382878673' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_employee\``); + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_officer\``); + await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS + WITH Position AS ( + SELECT + posExecutive.posExecutiveName, + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM position pn + LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + pn.posExecutiveName, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM posMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE + orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + pm.posExecutiveName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profile p + LEFT JOIN posLevel ON p.posLevelId = posLevel.id + LEFT JOIN posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1 + `); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]); + await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS + WITH Position AS ( + SELECT + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM employeePosition pn + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM employeePosMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileEmployeeId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileEmployeeId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + p.employeeClass, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + p.position, + posType.posTypeName, + CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName", + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profileEmployee p + LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id + LEFT JOIN employeePosType posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1 + `); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS \"posLevelName\",\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_employee\``); + await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]); + await queryRunner.query(`DROP VIEW \`view_registry_officer\``); + await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS WITH Position AS ( + SELECT + posExecutive.posExecutiveName, + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM position pn + LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + pn.posExecutiveName, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM posMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE + orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + pm.posExecutiveName, + p.position, + posType.posTypeName, + posLevel.posLevelName, + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profile p + LEFT JOIN posLevel ON p.posLevelId = posLevel.id + LEFT JOIN posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1`); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]); + await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS WITH Position AS ( + SELECT + pn.posMasterId, + ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number + FROM employeePosition pn + WHERE pn.positionIsSelected IS TRUE + ), + PosMaster AS ( + SELECT + pm.current_holderId, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + orgRoot.orgRootName, + orgChild1.orgChild1Name, + orgChild2.orgChild2Name, + orgChild3.orgChild3Name, + orgChild4.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo) + WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo) + ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo) + END AS searchShortName, + ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number + FROM employeePosMaster pm + LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId + LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId + LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id + LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id + LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id + LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id + LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1 + WHERE orgRevision.orgRevisionIsCurrent IS TRUE + AND orgRevision.orgRevisionIsDraft IS FALSE + ), + Education AS ( + SELECT + ed.degree, + ed.profileEmployeeId, + ed.level, + ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number + FROM profileEducation ed + WHERE ed.isUse IS TRUE + ORDER BY ed.level ASC + ) + SELECT + p.id as profileEmployeeId, + p.citizenId, + p.rank, + p.prefix, + p.firstName, + p.lastName, + p.isProbation, + p.isLeave, + p.isRetirement, + p.leaveType, + p.employeeClass, + pm.posMasterNo, + pm.orgRootId, + pm.orgChild1Id, + pm.orgChild2Id, + pm.orgChild3Id, + pm.orgChild4Id, + pm.orgRootName, + pm.orgChild1Name, + pm.orgChild2Name, + pm.orgChild3Name, + pm.orgChild4Name, + CASE + WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName + WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName) + END AS org, + pm.searchShortName, + p.position, + posType.posTypeName, + CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName", + p.gender, + p.relationship, + p.dateAppoint, + p.dateRetire, + p.dateRetireLaw, + p.birthdate, + ed.degree, + TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age + FROM profileEmployee p + LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id + LEFT JOIN employeePosType posType ON p.posTypeId = posType.id + LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1 + LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1`); + await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS \"posLevelName\",\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]); + } + +} From 43b6e42389b437c7dbfe3f483aae5a2ec7a44be6 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Mon, 24 Feb 2025 15:26:38 +0700 Subject: [PATCH 08/12] add path salary employee position --- .../ProfileSalaryEmployeeController.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/controllers/ProfileSalaryEmployeeController.ts b/src/controllers/ProfileSalaryEmployeeController.ts index 5bd933f4..a0b561e5 100644 --- a/src/controllers/ProfileSalaryEmployeeController.ts +++ b/src/controllers/ProfileSalaryEmployeeController.ts @@ -59,6 +59,21 @@ export class ProfileSalaryEmployeeController extends Controller { return new HttpSuccess(record); } + @Get("position/{profileId}") + public async getPositionSalaryEmployee( + @Path() profileId: string, + @Request() req: RequestWithUser, + ) { + let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_EMP"); + if (_workflow == false) + await new permission().PermissionOrgUserGet(req, "SYS_REGISTRY_EMP", profileId); + const record = await this.salaryRepo.find({ + where: { profileEmployeeId: profileId }, + order: { order: "ASC" }, + }); + return new HttpSuccess(record); + } + @Get("admin/{profileId}") public async getSalaryEmployeeAdmin(@Path() profileId: string, @Request() req: RequestWithUser) { let _workflow = await new permission().Workflow(req, profileId, "SYS_WAGE"); From d88ac804bebf9fe8ab064ac81ab9a8f363e874f9 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Mon, 24 Feb 2025 16:21:33 +0700 Subject: [PATCH 09/12] add path salary position of user --- src/controllers/ProfileSalaryController.ts | 13 +++++++++++++ src/controllers/ProfileSalaryEmployeeController.ts | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/controllers/ProfileSalaryController.ts b/src/controllers/ProfileSalaryController.ts index 827a0913..cbba0397 100644 --- a/src/controllers/ProfileSalaryController.ts +++ b/src/controllers/ProfileSalaryController.ts @@ -43,6 +43,19 @@ export class ProfileSalaryController extends Controller { return new HttpSuccess(record); } + @Get("position/user") + public async getSalaryPositionUser(@Request() request: { user: Record }) { + const profile = await this.profileRepo.findOneBy({ keycloak: request.user.sub }); + if (!profile) { + throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว"); + } + const record = await this.salaryRepo.find({ + where: { profileId: profile.id }, + order: { order: "ASC" }, + }); + return new HttpSuccess(record); + } + @Get("{profileId}") public async getSalary(@Path() profileId: string, @Request() req: RequestWithUser) { let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_OFFICER"); diff --git a/src/controllers/ProfileSalaryEmployeeController.ts b/src/controllers/ProfileSalaryEmployeeController.ts index a0b561e5..8294eb34 100644 --- a/src/controllers/ProfileSalaryEmployeeController.ts +++ b/src/controllers/ProfileSalaryEmployeeController.ts @@ -47,6 +47,19 @@ export class ProfileSalaryEmployeeController extends Controller { return new HttpSuccess(record); } + @Get("position/user") + public async getSalaryPositionUser(@Request() request: { user: Record }) { + const profile = await this.profileRepo.findOneBy({ keycloak: request.user.sub }); + if (!profile) { + throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว"); + } + const record = await this.salaryRepo.find({ + where: { profileEmployeeId: profile.id }, + order: { order: "ASC" }, + }); + return new HttpSuccess(record); + } + @Get("{profileId}") public async getSalaryEmployee(@Path() profileId: string, @Request() req: RequestWithUser) { let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_EMP"); From e28f65f5f4de6a53022c28fd5fbe4b03c2b493f7 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Mon, 24 Feb 2025 17:17:21 +0700 Subject: [PATCH 10/12] fix commandNo : type (String) --- src/entities/ProfileSalary.ts | 10 +++++----- src/entities/ProfileSalaryHistory.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/entities/ProfileSalary.ts b/src/entities/ProfileSalary.ts index d4039270..4ff74553 100644 --- a/src/entities/ProfileSalary.ts +++ b/src/entities/ProfileSalary.ts @@ -36,7 +36,7 @@ export class ProfileSalary extends EntityBase { comment: "เลขที่คำสั่ง", default: null, }) - commandNo: number; + commandNo: string; @Column({ nullable: true, @@ -266,7 +266,7 @@ export class CreateProfileSalary { positionCee?: string | null; commandCode?: string | null; commandName?: string | null; - commandNo?: number | null; + commandNo?: string | null; commandYear?: number | null; } @@ -293,7 +293,7 @@ export class CreateProfileSalaryEmployee { positionCee?: string | null; commandCode?: string | null; commandName?: string | null; - commandNo?: number | null; + commandNo?: string | null; commandYear?: number | null; } @@ -318,7 +318,7 @@ export class UpdateProfileSalaryEmployee { positionCee?: string | null; commandCode?: string | null; commandName?: string | null; - commandNo?: number | null; + commandNo?: string | null; commandYear?: number | null; } @@ -344,6 +344,6 @@ export type UpdateProfileSalary = { positionCee?: string | null; commandCode?: string | null; commandName?: string | null; - commandNo?: number | null; + commandNo?: string | null; commandYear?: number | null; }; diff --git a/src/entities/ProfileSalaryHistory.ts b/src/entities/ProfileSalaryHistory.ts index de1c212e..bd6f54c6 100644 --- a/src/entities/ProfileSalaryHistory.ts +++ b/src/entities/ProfileSalaryHistory.ts @@ -17,7 +17,7 @@ export class ProfileSalaryHistory extends EntityBase { comment: "เลขที่คำสั่ง", default: null, }) - commandNo: number; + commandNo: string; @Column({ nullable: true, From 438e164fcb2d8fe719d2944b98ee7fba08dcac26 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 17:31:03 +0700 Subject: [PATCH 11/12] migrate --- src/entities/ProfileSalary.ts | 2 +- .../1740392430192-updateProfileSalary.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/migration/1740392430192-updateProfileSalary.ts diff --git a/src/entities/ProfileSalary.ts b/src/entities/ProfileSalary.ts index 4ff74553..2ef4b4cf 100644 --- a/src/entities/ProfileSalary.ts +++ b/src/entities/ProfileSalary.ts @@ -242,7 +242,7 @@ export class ProfileSalary extends EntityBase { } export class CreateProfileSalary { - profileId: string; + profileId: string | null; commandDateAffect?: Date | null; commandDateSign?: Date | null; amount?: Double | null; diff --git a/src/migration/1740392430192-updateProfileSalary.ts b/src/migration/1740392430192-updateProfileSalary.ts new file mode 100644 index 00000000..6671212f --- /dev/null +++ b/src/migration/1740392430192-updateProfileSalary.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateProfileSalary1740392430192 implements MigrationInterface { + name = 'UpdateProfileSalary1740392430192' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandNo\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandNo\` varchar(255) NULL COMMENT 'เลขที่คำสั่ง'`); + await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandNo\``); + await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandNo\` varchar(255) NULL COMMENT 'เลขที่คำสั่ง'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandNo\``); + await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandNo\` int NULL COMMENT 'เลขที่คำสั่ง'`); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandNo\``); + await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandNo\` int NULL COMMENT 'เลขที่คำสั่ง'`); + } + +} From b2650a6b7aa5e6fb6b3c2a1cf282e31f611f7f97 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 24 Feb 2025 17:50:17 +0700 Subject: [PATCH 12/12] del migrate --- src/migration/1740366319309-update2242025.ts | 246 ------------------- 1 file changed, 246 deletions(-) delete mode 100644 src/migration/1740366319309-update2242025.ts diff --git a/src/migration/1740366319309-update2242025.ts b/src/migration/1740366319309-update2242025.ts deleted file mode 100644 index bbcd2248..00000000 --- a/src/migration/1740366319309-update2242025.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class Update22420251740366319309 implements MigrationInterface { - name = 'Update22420251740366319309' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`idOFFICER\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP PRIMARY KEY`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ID\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_PERSON_TYPE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RANK_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TYPE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_YEAR\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETURN_OCCUPY_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FORCE_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UPCLASS_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FUND_COURSE_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`EDUCATION_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MAJOR_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MAJOR_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UNIVER_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POSITION_CATG\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_2\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIALIST_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIALIST_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME_1\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_1\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_ADD\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_PERCENT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_AMT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`PAYMENT_AMT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`PAYMENT_PERCENT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_1\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`COST_LIVING_AMOUNT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DEPARTMENT_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DIVISION_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SECTION_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`JOB_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_CUR_ST\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_NUM\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_POS_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_YEAR\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_MP_YEAR\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_CODE_1\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CUR_YEAR\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_ABB\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CONTENT_NO\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_ABB_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_NUM_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CUR_YEAR_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_YEAR_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_DATE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_POS_DATE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_1_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_CODE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_AMT_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_ADD_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_CODE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`GROUPWORK_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_CODE_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_NAME_O\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_RETIRE_STATUS\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MARRIAGE_STATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SUN_NO\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETIRE_TYPE_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETIRE_POS_NO\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DEXPIRE_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`HELP_LIVING_AMOUNT\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_DEPARTMENT_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_DIVISION_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_SECTION_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_JOB_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CREATE_DATE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UPDATE_DATE\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`STREET\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`TEL\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`CONTACT_STREET\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`CONTACT_TEL\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`FATHER_RANK_CODE\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`MOTHER_RANK_CODE\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`SPOUSE_RANK_CODE\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`LIFE_SPOUSE\``); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`SUN_NO\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`FLAG_EDUCATION\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`MAJOR_CODE\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`MINOR_CODE\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`FUND_COURSE_CODE\``); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`id\` int NOT NULL PRIMARY KEY AUTO_INCREMENT`); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`id\``); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`id\` int NOT NULL PRIMARY KEY AUTO_INCREMENT`); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`order_move_position\``); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`order_move_position\` text NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`EDUCATION_SEQ\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`EDUCATION_SEQ\` varchar(255) NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`EDUCATION_SEQ\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`EDUCATION_SEQ\` varchar(255) NULL`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`EDUCATION_SEQ\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`EDUCATION_SEQ\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`EDUCATION_SEQ\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`EDUCATION_SEQ\` text NULL`); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`order_move_position\``); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`order_move_position\` int NULL`); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`id\``); - await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`id\` int NOT NULL DEFAULT '0'`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`id\``); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`FUND_COURSE_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`MINOR_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`MAJOR_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`FLAG_EDUCATION\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`SUN_NO\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`LIFE_SPOUSE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`SPOUSE_RANK_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`MOTHER_RANK_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`FATHER_RANK_CODE\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`CONTACT_TEL\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`CONTACT_STREET\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`TEL\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`STREET\` mediumtext NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UPDATE_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CREATE_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_JOB_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_SECTION_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_DIVISION_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_DEPARTMENT_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`HELP_LIVING_AMOUNT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DEXPIRE_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETIRE_POS_NO\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETIRE_TYPE_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SUN_NO\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MARRIAGE_STATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_RETIRE_STATUS\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_NAME_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_CODE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`GROUPWORK_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_CODE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_ADD_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_AMT_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_CODE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_1_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_POS_DATE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_DATE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_CODE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_YEAR_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CUR_YEAR_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_NUM_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_ABB_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_O\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CONTENT_NO\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_ABB\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CUR_YEAR\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_CODE_1\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_MP_YEAR\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_YEAR\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_POS_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_NUM\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_CUR_ST\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`JOB_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SECTION_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DIVISION_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DEPARTMENT_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`COST_LIVING_AMOUNT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_1\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`PAYMENT_PERCENT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`PAYMENT_AMT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_AMT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_PERCENT\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_ADD\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SAL_POS_AMOUNT_1\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_ABB_NAME_1\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIALIST_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIALIST_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SAL_POS_AMOUNT_2\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_ABB_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POSITION_CATG\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UNIVER_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MAJOR_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MAJOR_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`EDUCATION_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FUND_COURSE_NAME\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UPCLASS_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FORCE_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETURN_OCCUPY_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_YEAR\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_DATE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TYPE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RANK_CODE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_PERSON_TYPE\` text NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ID\` varchar(13) NOT NULL`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD PRIMARY KEY (\`ID\`)`); - await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`idOFFICER\` int NULL`); - } - -}