From b2ac1878b92370d3dbc785dd3076e37d1c442181 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 31 Mar 2025 16:59:14 +0700 Subject: [PATCH 01/10] feat: enable websocket --- package-lock.json | 230 +++++++++++++++++++++++++++++++++++++- package.json | 1 + src/app.ts | 4 +- src/services/webSocket.ts | 98 ++++++++++------ 4 files changed, 294 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4bec754c..54d03929 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "querystring": "^0.2.1", "redis": "^3.1.2", "reflect-metadata": "^0.2.1", + "socket.io": "^4.8.1", "swagger-ui-express": "^5.0.0", "tsoa": "^6.0.1", "typeorm": "^0.3.19", @@ -347,6 +348,12 @@ "node": ">=14" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, "node_modules/@sqltools/formatter": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", @@ -468,7 +475,6 @@ "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -873,6 +879,15 @@ } ] }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/bignumber.js": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", @@ -1626,6 +1641,88 @@ "node": ">= 0.8" } }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/es-abstract": { "version": "1.22.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", @@ -4153,6 +4250,137 @@ "node": ">=10" } }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index d689a9c3..9422657c 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "querystring": "^0.2.1", "redis": "^3.1.2", "reflect-metadata": "^0.2.1", + "socket.io": "^4.8.1", "swagger-ui-express": "^5.0.0", "tsoa": "^6.0.1", "typeorm": "^0.3.19", diff --git a/src/app.ts b/src/app.ts index b0652ce4..bb627c36 100644 --- a/src/app.ts +++ b/src/app.ts @@ -14,12 +14,12 @@ import logMiddleware from "./middlewares/logs"; import { CommandController } from "./controllers/CommandController"; import { ProfileSalaryController } from "./controllers/ProfileSalaryController"; -// import { initWebSocket } from "./services/webSocket"; +import { initWebSocket } from "./services/webSocket"; async function main() { await AppDataSource.initialize(); - // initWebSocket(); + initWebSocket(); const app = express(); diff --git a/src/services/webSocket.ts b/src/services/webSocket.ts index 5f088555..a125a3f9 100644 --- a/src/services/webSocket.ts +++ b/src/services/webSocket.ts @@ -1,43 +1,69 @@ -// import { WebSocketServer } from "ws"; +import { Server } from "socket.io"; -// let wss: WebSocketServer; +let io: Server; -// export function initWebSocket() { -// wss = new WebSocketServer({ port: 13002, path: "/api/v1/org-socket" }); +export function initWebSocket() { + if (io) return; -// // การจัดการคำขออัปเกรดจาก HTTP เป็น WebSocket -// wss.on("upgrade", (request: any, socket: any, head: any) => { -// console.log("🔹 Handling upgrade request..."); -// wss.handleUpgrade(request, socket, head, (ws: any) => { -// console.log("🔹 WebSocket connection established"); -// wss.emit("connection", ws, request); -// }); -// }); + io = new Server({ cors: { origin: "*" }, path: "/api/v1/org-socket" }); -// wss.on("connection", (ws: any) => { -// console.log("✅ Client connected to WebSocket"); + io.use(async (socket, next) => { + const token = socket.handshake.auth.token; -// ws.on("close", () => { -// console.log("❌ Client disconnected"); -// }); + const res = await fetch(`${process.env.AUTH_REALM_URL}/protocol/openid-connect/userinfo`, { + headers: { authorization: `Bearer ${token}` }, + }).catch((e) => console.error(e)); -// ws.on("error", (error: any) => { -// console.error("WebSocket error:", error); -// }); -// }); -// } + if (res?.ok) { + socket.data.user = await res.json(); + } -// export async function sendWebSocket(data: any) { -// if (!wss) initWebSocket(); -// wss.clients.forEach((client: any) => { -// if (client.readyState === WebSocket.OPEN) { -// const message = JSON.stringify(data); -// console.log("📤 Sending data to client:", message); -// client.send(message, (err: any) => { -// if (err) { -// console.error("❌ Error sending message:", err); -// } -// }); -// } -// }); -// } + next(); + }); + + io.on("connection", (ws) => { + console.log("✅ Client connected to WebSocket"); + + ws.on("close", () => { + console.log("❌ Client disconnected"); + }); + + ws.on("error", (error: any) => { + console.error("WebSocket error:", error); + }); + }); + + io.listen(13002); +} + +export async function sendWebSocket( + event: string, + data: any, + opts?: { + roles?: string[]; + userId?: string[]; + }, +) { + if (!io) initWebSocket(); + + for (let [id, session] of io.of("/").sockets) { + const user: { + sub: string; + name: string; + given_name: string; + family_name: string; + preferred_username: string; + email: string; + role: string[]; + } = session.data.user; + + if (!user) continue; + + if ( + user.role?.some((v) => opts?.roles?.includes(v)) || + opts?.userId?.some((v) => user.sub === v) + ) { + io.to(id).emit(event, JSON.stringify(data)); + } + } +} From 63aea8dc274bd6d94bb6dc542a8716c067147933 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:31:44 +0700 Subject: [PATCH 02/10] feat: socket target can also be string --- src/services/webSocket.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/webSocket.ts b/src/services/webSocket.ts index a125a3f9..2f9b42ff 100644 --- a/src/services/webSocket.ts +++ b/src/services/webSocket.ts @@ -40,8 +40,8 @@ export async function sendWebSocket( event: string, data: any, opts?: { - roles?: string[]; - userId?: string[]; + roles?: string | string[]; + userId?: string | string[]; }, ) { if (!io) initWebSocket(); @@ -59,6 +59,9 @@ export async function sendWebSocket( if (!user) continue; + if (typeof opts?.roles === "string") opts.roles = [opts.roles]; + if (typeof opts?.userId === "string") opts.userId = [opts.userId]; + if ( user.role?.some((v) => opts?.roles?.includes(v)) || opts?.userId?.some((v) => user.sub === v) From 11f4636342d6b49c80dff1baed05a6c2b130e5cc Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:34:06 +0700 Subject: [PATCH 03/10] feat: add notification --- src/services/rabbitmq.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 45a95520..3bb45ef6 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -24,6 +24,7 @@ import { Position } from "../entities/Position"; import { In, Not } from "typeorm"; import { PosMasterAct } from "../entities/PosMasterAct"; import { PermissionOrg } from "../entities/PermissionOrg"; +import { sendWebSocket } from "./webSocket"; export let sendToQueue: (payload: any) => void; export let sendToQueueOrg: (payload: any) => void; @@ -122,6 +123,14 @@ async function handler(msg: amqp.ConsumeMessage): Promise { relations: ["commandType", "commandRecives"], }); if (!command) return true; + sendWebSocket( + "send-command-notification", + { + message: `ระบบทำการออกคำสั่งเลขที่ ${command.commandNo}/${command.commandYear + 543}`, + payload: command, + }, + { userId: user.sub }, + ).catch(console.error); const path = commandTypePath(command.commandType.code); if (path == null) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบประเภทคำสั่งนี้ในระบบ"); return await new CallAPI() @@ -156,8 +165,17 @@ async function handler(msg: amqp.ConsumeMessage): Promise { console.log("[AMQ] Excecute Command Success"); Object.assign(command, { status, lastUpdateUserId, lastUpdateFullName, lastUpdatedAt }); const result = await repo.save(command).catch((e) => console.log(e)); - if (result) return true; - return false; + + sendWebSocket( + "send-command-notification", + { + message: `ระบบออกคำสั่งเลขที่ ${command.commandNo}/${command.commandYear + 543} เสร็จสิ้น`, + payload: command, + }, + { userId: user.sub }, + ).catch(console.error); + + return !!result; }) .catch((e) => { console.error(e); From 046f6bff85ad052ae6cb3c5eae7a18ee18bfd981 Mon Sep 17 00:00:00 2001 From: Bright Date: Mon, 31 Mar 2025 17:35:09 +0700 Subject: [PATCH 04/10] =?UTF-8?q?=E0=B8=AD=E0=B8=AD=E0=B8=81=E0=B8=84?= =?UTF-8?q?=E0=B8=B3=E0=B8=AA=E0=B8=B1=E0=B9=88=E0=B8=87=E0=B8=81=E0=B8=A5?= =?UTF-8?q?=E0=B8=B1=E0=B8=9A=E0=B8=A3=E0=B8=B1=E0=B8=9A=E0=B8=A3=E0=B8=B2?= =?UTF-8?q?=E0=B8=8A=E0=B8=81=E0=B8=B2=E0=B8=A3=20=E0=B8=9B=E0=B8=B1?= =?UTF-8?q?=E0=B9=8A=E0=B8=A1=E0=B8=9F=E0=B8=B4=E0=B8=A5=E0=B8=94=E0=B9=8C?= =?UTF-8?q?=E0=B8=9B=E0=B8=A3=E0=B8=B0=E0=B9=80=E0=B8=A0=E0=B8=97=20?= =?UTF-8?q?=E0=B8=A3=E0=B8=B0=E0=B8=94=E0=B8=B1=E0=B8=9A=20=E0=B8=95?= =?UTF-8?q?=E0=B8=B3=E0=B9=81=E0=B8=AB=E0=B8=99=E0=B9=88=E0=B8=87=E0=B9=83?= =?UTF-8?q?=E0=B8=AB=E0=B8=A1=E0=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/CommandController.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index a10c93ce..79199ba6 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -3065,6 +3065,9 @@ export class CommandController extends Controller { commandCode?: string | null; commandName?: string | null; remark: string | null; + positionTypeNew?: string | null; + positionLevelNew?: string | null; + positionNameNew?: string | null; }[]; }, ) { @@ -3145,6 +3148,9 @@ export class CommandController extends Controller { profile.leaveRemark = _null; profile.leaveDate = _null; profile.leaveType = _null; + profile.position = item.positionNameNew ?? _null; + profile.posTypeId = item.positionTypeNew ?? _null; + profile.posLevelId = item.positionLevelNew ?? _null } let userKeycloakId; const checkUser = await getUserByUsername(profile.citizenId); From 23cc373e3397e2e0cc1ba7b4e71c9c4cfd0ae7f0 Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Mon, 31 Mar 2025 17:45:00 +0700 Subject: [PATCH 05/10] sort root --- src/controllers/OrganizationController.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/controllers/OrganizationController.ts b/src/controllers/OrganizationController.ts index 66ee363d..d0ef4e2c 100644 --- a/src/controllers/OrganizationController.ts +++ b/src/controllers/OrganizationController.ts @@ -5626,6 +5626,9 @@ export class OrganizationController extends Controller { const data = await this.orgRootRepository.find({ where: { orgRevisionId: orgRevisionActive.id }, + order: { + orgRootOrder: "ASC", + }, }); return new HttpSuccess(data.map((x) => x.id)); } @@ -5647,6 +5650,9 @@ export class OrganizationController extends Controller { const data = await this.orgRootRepository.find({ where: { orgRevisionId: orgRevisionActive.id }, + order: { + orgRootOrder: "ASC", + }, }); return new HttpSuccess(data); } @@ -5686,6 +5692,7 @@ export class OrganizationController extends Controller { "orgChild1s.orgChild2s.orgChild3s.orgChild4s", ], order: { + orgRootOrder: "ASC", orgChild1s: { orgChild1Order: "ASC", orgChild2s: { From aac393f6f875e729ffbcc5dff81e00545f83b4f7 Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Tue, 1 Apr 2025 00:38:04 +0700 Subject: [PATCH 06/10] check type object log --- src/interfaces/utils.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/interfaces/utils.ts b/src/interfaces/utils.ts index b4beacde..8fc04353 100644 --- a/src/interfaces/utils.ts +++ b/src/interfaces/utils.ts @@ -464,10 +464,20 @@ export type LogSequence = { }; export function setLogDataDiff(req: RequestWithUser, data: DataDiff) { - req.app.locals.logData.dataDiff = { - before: JSON.stringify(data.before), - after: JSON.stringify(data.after), - }; + // Check if data.before and data.after are valid objects + if ( + data.before && + typeof data.before === "object" && + data.after && + typeof data.after === "object" + ) { + req.app.locals.logData.dataDiff = { + before: JSON.stringify(data.before), + after: JSON.stringify(data.after), + }; + } else { + console.error("Invalid data provided: both before and after must be valid objects."); + } } export function addLogSequence(req: RequestWithUser, data: LogSequence) { From 00fbe53f178d4018ac5ddd658afc6779b8ddb3cc Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Tue, 1 Apr 2025 01:34:38 +0700 Subject: [PATCH 07/10] on noti --- .github/workflows/release.yaml | 72 +++++++++++++++++----------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 21dc9ba3..c4b02bcc 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -67,40 +67,40 @@ jobs: docker compose pull docker compose up -d echo "${{ steps.gen_ver.outputs.image_ver }}"> success - # - name: Notify Discord Success - # if: success() - # run: | - # curl -H "Content-Type: application/json" \ - # -X POST \ - # -d '{ - # "embeds": [{ - # "title": "✅ Deployment Success!", - # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", - # "color": 3066993, - # "footer": { - # "text": "Release Notification", - # "icon_url": "https://example.com/success-icon.png" - # }, - # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - # }] - # }' \ - # ${{ secrets.DISCORD_WEBHOOK }} + - name: Notify Discord Success + if: success() + run: | + curl -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "embeds": [{ + "title": "✅ Deployment Success!", + "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", + "color": 3066993, + "footer": { + "text": "Release Notification", + "icon_url": "https://example.com/success-icon.png" + }, + "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + }] + }' \ + ${{ secrets.DISCORD_WEBHOOK }} - # - name: Notify Discord Failure - # if: failure() - # run: | - # curl -H "Content-Type: application/json" \ - # -X POST \ - # -d '{ - # "embeds": [{ - # "title": "❌ Deployment Failed!", - # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", - # "color": 15158332, - # "footer": { - # "text": "Release Notification", - # "icon_url": "https://example.com/failure-icon.png" - # }, - # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - # }] - # }' \ - # ${{ secrets.DISCORD_WEBHOOK }} + - name: Notify Discord Failure + if: failure() + run: | + curl -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "embeds": [{ + "title": "❌ Deployment Failed!", + "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", + "color": 15158332, + "footer": { + "text": "Release Notification", + "icon_url": "https://example.com/failure-icon.png" + }, + "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + }] + }' \ + ${{ secrets.DISCORD_WEBHOOK }} From 72bd27c9b0b573b4c9d25dddab434550f1dac131 Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Tue, 1 Apr 2025 11:14:42 +0700 Subject: [PATCH 08/10] =?UTF-8?q?status=20=E0=B8=8A=E0=B9=88=E0=B8=A7?= =?UTF-8?q?=E0=B8=A2=E0=B8=A3=E0=B8=B2=E0=B8=8A=E0=B8=81=E0=B8=B2=E0=B8=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProfileAssistanceController.ts | 19 + src/entities/ProfileAssistance.ts | 7 + .../1743480298636-update_01042512464.ts | 1242 +++++++++++++++++ 3 files changed, 1268 insertions(+) create mode 100644 src/migration/1743480298636-update_01042512464.ts diff --git a/src/controllers/ProfileAssistanceController.ts b/src/controllers/ProfileAssistanceController.ts index 5db71276..7858c7dd 100644 --- a/src/controllers/ProfileAssistanceController.ts +++ b/src/controllers/ProfileAssistanceController.ts @@ -198,4 +198,23 @@ export class ProfileAssistanceController extends Controller { return new HttpSuccess(); } + + @Post("status") + public async editStatusProfileAssistance( + @Body() body: { status: string; refId: string }, + @Request() req: RequestWithUser, + @Path() assistanceId: string, + ) { + const record = await this.profileAssistanceRepo.findOneBy({ refId: body.refId }); + if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); + + record.status = body.status.trim().toLocaleUpperCase(); + record.lastUpdateUserId = req.user.sub; + record.lastUpdateFullName = req.user.name; + record.lastUpdatedAt = new Date(); + + this.profileAssistanceRepo.save(record); + + return new HttpSuccess(); + } } diff --git a/src/entities/ProfileAssistance.ts b/src/entities/ProfileAssistance.ts index 14300339..1c92d3f8 100644 --- a/src/entities/ProfileAssistance.ts +++ b/src/entities/ProfileAssistance.ts @@ -15,6 +15,13 @@ export class ProfileAssistance extends EntityBase { }) profileId: string; + @Column({ + comment: "สถานะ", + default: "PENDING", + length: 20, + }) + status: string; + @Column({ nullable: true, comment: "หน่วยงานที่ให้ช่วยราชการ", diff --git a/src/migration/1743480298636-update_01042512464.ts b/src/migration/1743480298636-update_01042512464.ts new file mode 100644 index 00000000..1ad151c9 --- /dev/null +++ b/src/migration/1743480298636-update_01042512464.ts @@ -0,0 +1,1242 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class Update010425124641743480298636 implements MigrationInterface { + name = 'Update010425124641743480298636' + + public async up(queryRunner: QueryRunner): Promise { + // await queryRunner.query(`ALTER TABLE \`position\` DROP FOREIGN KEY \`FK_bfcf6ec9f1e08c2a351be8df46a\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`amount\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionSalaryAmount\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`mouthSalaryAmount\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`profileId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionExecutive\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionType\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionLevel\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`order\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`profileEmployeeId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`dateGovernment\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`isGovernment\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`amountSpecial\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`orgRoot\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`orgChild1\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`orgChild2\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`orgChild3\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`orgChild4\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandYear\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandDateSign\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandDateAffect\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandCode\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`posNoAbb\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`positionCee\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`remark\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`commandNo\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`IsActive\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`SalaryClass\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PosNoId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`OcId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionExecutiveId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionExecutiveSideId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionLevelId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionLineId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionPathSideId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionTypeId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`OrganizationShortNameId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionEmployeeGroupId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionEmployeeLevelId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionEmployeePositionId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionEmployeePositionSideId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PosNoEmployee\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`RefCommandDate\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`RefCommandNo\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`CommandTypeName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`SalaryStatus\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`AgencyName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`CLevel\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`OrgName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionExecutiveName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionLineName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionPathSideName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionRef\``); + // 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 \`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 \`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 \`IMPORT_ORG\` DROP COLUMN \`ORDER\``); + // await queryRunner.query(`ALTER TABLE \`IMPORT_ORG\` DROP COLUMN \`HRMS_DEP_CODE\``); + // await queryRunner.query(`ALTER TABLE \`IMPORT_ORG\` DROP COLUMN \`HRMS_DIV_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`CIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_PERSON_TYPE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_POS_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_COMMAND_NUM\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_TO_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`WORK_LINE_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SPECIALIST_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`ADMIN_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`REMARK\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`ORDER_MOVE_POSITION\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_COMMAND_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`JOB_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SECTION_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`DIVISION_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`DEPARTMENT_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_CEE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_1\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_2\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SPECIAL_AMT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`USER_CREATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`USER_UPDATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`CUR_YEAR\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_YEAR\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_FORCE_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`JOB_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SECTION_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`DIVISION_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`DEPARTMENT_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`WORK_LINE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_LEVEL_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`ADMIN_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_POS_CODE_1\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME_1\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_POS_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SPECIALIST_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FILL_APP_FLAG\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_POS_STATUS\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_FLAG\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`UP_C_FLAG\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_FLAG_CURRENT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`AUDIT_FLAG\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`AUDIT_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`CREATE_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`UPDATE_DATE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_FLAG_1\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`COURSE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`COURSE_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`PLACE_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`PROVINCE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`COUNTRY_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POSITION_CATG\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`REC_STATUS\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MVMENT_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MVMENT_OF\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_ABB_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_COMMAND_NUM_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`CUR_YEAR_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE_E\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`FLAG_TO_NAME_E\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_COMMAND_DATE_EDIT\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`MP_CEE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`SALARY_LEVEL\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`GROUPWORK_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`GROUPWORK_NAME\``); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` DROP COLUMN \`ACTIVE_STATUS\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`MINOR_CODE\``); + await queryRunner.query(`ALTER TABLE \`profileAssistance\` ADD \`status\` varchar(20) NOT NULL COMMENT 'สถานะ' DEFAULT 'PENDING'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`Order\` int NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`Amount\` double NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionSalaryAmount\` double NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionName\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`ProfileId\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ID\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`mp_command_num\``); + // await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`mp_command_num\` int NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD PRIMARY KEY (\`id\`)`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`posNo\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`posNo\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`SalaryRef\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`SalaryRef\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PosNoName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PosNoName\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionTypeName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionTypeName\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionLevelName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionLevelName\` varchar(255) NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`FUND_COURSE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`FUND_COURSE_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`MAJOR_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`MAJOR_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`FLAG_EDUCATION\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`FLAG_EDUCATION\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`position\` ADD CONSTRAINT \`FK_bfcf6ec9f1e08c2a351be8df46a\` FOREIGN KEY (\`posMasterId\`) REFERENCES \`posMaster\`(\`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, +// pn.positionArea, +// 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 +// pn.positionArea, +// 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 +// ), +// Educations AS ( +// SELECT +// eds.profileId, +// JSON_ARRAYAGG( +// JSON_OBJECT( +// 'degree', eds.degree, +// 'field', eds.field, +// 'educationLevel', eds.educationLevel, +// 'isEducation', eds.isEducation, +// 'isHigh', eds.isHigh +// ) +// ) AS Educations +// FROM ( +// SELECT DISTINCT +// eds.degree, +// eds.field, +// eds.educationLevel, +// eds.isEducation, +// eds.isHigh, +// eds.profileId, +// eds.level +// FROM profileEducation eds +// ) AS eds +// GROUP BY eds.profileId +// ORDER BY eds.level DESC +// ), +// EducationLevels AS ( +// SELECT +// edls.profileId, +// GROUP_CONCAT(DISTINCT edls.educationLevel ORDER BY edls.educationLevel SEPARATOR ', ') AS educationLevels +// FROM profileEducation edls +// WHERE edls.educationLevel IS NOT NULL AND edls.educationLevel != '' +// GROUP BY edls.profileId +// ORDER BY edls.level DESC +// ), +// Degrees AS ( +// SELECT +// degs.profileId, +// GROUP_CONCAT(DISTINCT degs.degree ORDER BY degs.degree SEPARATOR ', ') AS degrees +// FROM profileEducation degs +// WHERE degs.degree IS NOT NULL AND degs.degree != '' +// GROUP BY degs.profileId +// ORDER BY degs.level DESC +// ), +// Fields AS ( +// SELECT +// fies.profileId, +// GROUP_CONCAT(DISTINCT fies.field ORDER BY fies.field SEPARATOR ', ') AS fields +// FROM profileEducation fies +// WHERE fies.field IS NOT NULL AND fies.field != '' +// GROUP BY fies.profileId +// ORDER BY fies.level DESC +// ), +// PositionDate AS ( +// SELECT +// vcto.Years, +// vcto.Months, +// vcto.Days, +// vcto.profileId +// FROM tenurePositionOfficer vcto +// ), +// PositionLevelDate AS ( +// SELECT +// vctlo.Years, +// vctlo.Months, +// vctlo.Days, +// vctlo.profileId +// FROM tenureLevelOfficer vctlo +// ) +// 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, +// pm.positionArea, +// p.position, +// posType.posTypeName, +// posLevel.posLevelName, +// p.gender, +// p.relationship, +// p.dateAppoint, +// p.dateRetire, +// p.dateRetireLaw, +// p.birthdate, +// eds.Educations, +// edls.educationLevels, +// degs.degrees, +// fies.fields, +// TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age, +// vcto.Years, +// vcto.Months, +// vcto.Days, +// vctlo.Years AS levelYears, +// vctlo.Months AS levelMonths, +// vctlo.Days AS levelDays +// 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 Educations eds ON p.id = eds.profileId +// LEFT JOIN EducationLevels edls ON p.id = edls.profileId +// LEFT JOIN Degrees degs ON p.id = degs.profileId +// LEFT JOIN Fields fies ON p.id = fies.profileId +// LEFT JOIN PositionDate vcto ON p.id = vcto.profileId +// LEFT JOIN PositionLevelDate vctlo ON p.id = vctlo.profileId +// `); +// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n pn.positionArea,\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 pn.positionArea,\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 Educations AS (\n SELECT \n eds.profileId,\n JSON_ARRAYAGG(\n JSON_OBJECT(\n 'degree', eds.degree,\n 'field', eds.field,\n 'educationLevel', eds.educationLevel,\n 'isEducation', eds.isEducation,\n 'isHigh', eds.isHigh\n )\n ) AS Educations\n FROM (\n SELECT DISTINCT \n eds.degree, \n eds.field, \n eds.educationLevel, \n eds.isEducation, \n eds.isHigh, \n eds.profileId,\n\t\t\teds.level\n FROM profileEducation eds\n ) AS eds\n GROUP BY eds.profileId\n ORDER BY eds.level DESC\n ),\n EducationLevels AS (\n SELECT \n\t\t edls.profileId,\n GROUP_CONCAT(DISTINCT edls.educationLevel ORDER BY edls.educationLevel SEPARATOR ', ') AS educationLevels\n FROM profileEducation edls\n WHERE edls.educationLevel IS NOT NULL AND edls.educationLevel != ''\n GROUP BY edls.profileId\n ORDER BY edls.level DESC\n ),\n Degrees AS (\n SELECT \n\t\t degs.profileId,\n GROUP_CONCAT(DISTINCT degs.degree ORDER BY degs.degree SEPARATOR ', ') AS degrees\n FROM profileEducation degs\n WHERE degs.degree IS NOT NULL AND degs.degree != ''\n GROUP BY degs.profileId\n ORDER BY degs.level DESC\n ),\n Fields AS (\n SELECT \n\t\t fies.profileId,\n GROUP_CONCAT(DISTINCT fies.field ORDER BY fies.field SEPARATOR ', ') AS fields\n FROM profileEducation fies\n WHERE fies.field IS NOT NULL AND fies.field != ''\n GROUP BY fies.profileId\n ORDER BY fies.level DESC\n ),\n PositionDate AS (\n SELECT \n vcto.Years,\n vcto.Months,\n vcto.Days,\n vcto.profileId\n FROM tenurePositionOfficer vcto\n ),\n PositionLevelDate AS (\n SELECT \n vctlo.Years,\n vctlo.Months,\n vctlo.Days,\n vctlo.profileId\n FROM tenureLevelOfficer vctlo\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 pm.positionArea,\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 eds.Educations,\n edls.educationLevels,\n degs.degrees,\n fies.fields,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age,\n vcto.Years,\n vcto.Months,\n vcto.Days,\n vctlo.Years AS levelYears,\n vctlo.Months AS levelMonths,\n vctlo.Days AS levelDays\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 Educations eds ON p.id = eds.profileId\n LEFT JOIN EducationLevels edls ON p.id = edls.profileId\n LEFT JOIN Degrees degs ON p.id = degs.profileId\n LEFT JOIN Fields fies ON p.id = fies.profileId\n LEFT JOIN PositionDate vcto ON p.id = vcto.profileId\n LEFT JOIN PositionLevelDate vctlo ON p.id = vctlo.profileId"]); +// 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 +// ), +// Educations AS ( +// SELECT +// eds.profileEmployeeId, +// JSON_ARRAYAGG( +// JSON_OBJECT( +// 'degree', eds.degree, +// 'field', eds.field, +// 'educationLevel', eds.educationLevel, +// 'isEducation', eds.isEducation, +// 'isHigh', eds.isHigh +// ) +// ) AS Educations +// FROM ( +// SELECT DISTINCT +// eds.degree, +// eds.field, +// eds.educationLevel, +// eds.isEducation, +// eds.isHigh, +// eds.profileEmployeeId, +// eds.level +// FROM profileEducation eds +// ) AS eds +// GROUP BY eds.profileEmployeeId +// ORDER BY eds.level DESC +// ), +// EducationLevels AS ( +// SELECT +// edls.profileEmployeeId, +// GROUP_CONCAT(DISTINCT edls.educationLevel ORDER BY edls.educationLevel SEPARATOR ', ') AS educationLevels +// FROM profileEducation edls +// WHERE edls.educationLevel IS NOT NULL AND edls.educationLevel != '' +// GROUP BY edls.profileEmployeeId +// ORDER BY edls.level DESC +// ), +// Degrees AS ( +// SELECT +// degs.profileEmployeeId, +// GROUP_CONCAT(DISTINCT degs.degree ORDER BY degs.degree SEPARATOR ', ') AS degrees +// FROM profileEducation degs +// WHERE degs.degree IS NOT NULL AND degs.degree != '' +// GROUP BY degs.profileEmployeeId +// ), +// Fields AS ( +// SELECT +// fies.profileEmployeeId, +// GROUP_CONCAT(DISTINCT fies.field ORDER BY fies.field SEPARATOR ', ') AS fields +// FROM profileEducation fies +// WHERE fies.field IS NOT NULL AND fies.field != '' +// GROUP BY fies.profileEmployeeId +// ), +// PositionDate AS ( +// SELECT +// vcto.Years, +// vcto.Months, +// vcto.Days, +// vcto.profileEmployeeId +// FROM tenurePositionEmployee vcto +// ), +// PositionLevelDate AS ( +// SELECT +// vctlo.Years, +// vctlo.Months, +// vctlo.Days, +// vctlo.profileEmployeeId +// FROM tenureLevelEmployee vctlo +// ) +// 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, +// eds.Educations, +// edls.educationLevels, +// degs.degrees, +// fies.fields, +// TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age, +// vcto.Years, +// vcto.Months, +// vcto.Days, +// vctlo.Years AS levelYears, +// vctlo.Months AS levelMonths, +// vctlo.Days AS levelDays +// 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 Educations eds ON p.id = eds.profileEmployeeId +// LEFT JOIN EducationLevels edls ON p.id = edls.profileEmployeeId +// LEFT JOIN Degrees degs ON p.id = degs.profileEmployeeId +// LEFT JOIN Fields fies ON p.id = fies.profileEmployeeId +// LEFT JOIN PositionDate vcto ON p.id = vcto.profileEmployeeId +// LEFT JOIN PositionLevelDate vctlo ON p.id = vctlo.profileEmployeeId +// `); +// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization","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 Educations AS (\n SELECT \n eds.profileEmployeeId,\n JSON_ARRAYAGG(\n JSON_OBJECT(\n 'degree', eds.degree,\n 'field', eds.field,\n 'educationLevel', eds.educationLevel,\n 'isEducation', eds.isEducation,\n 'isHigh', eds.isHigh\n )\n ) AS Educations\n FROM (\n SELECT DISTINCT \n eds.degree, \n eds.field, \n eds.educationLevel, \n eds.isEducation, \n eds.isHigh, \n eds.profileEmployeeId,\n\t\t\teds.level\n FROM profileEducation eds\n ) AS eds\n GROUP BY eds.profileEmployeeId\n ORDER BY eds.level DESC\n ),\n EducationLevels AS (\n SELECT \n\t\t edls.profileEmployeeId,\n GROUP_CONCAT(DISTINCT edls.educationLevel ORDER BY edls.educationLevel SEPARATOR ', ') AS educationLevels\n FROM profileEducation edls\n WHERE edls.educationLevel IS NOT NULL AND edls.educationLevel != ''\n GROUP BY edls.profileEmployeeId\n ORDER BY edls.level DESC\n ),\n Degrees AS (\n SELECT \n\t\t degs.profileEmployeeId,\n GROUP_CONCAT(DISTINCT degs.degree ORDER BY degs.degree SEPARATOR ', ') AS degrees\n FROM profileEducation degs\n WHERE degs.degree IS NOT NULL AND degs.degree != ''\n GROUP BY degs.profileEmployeeId\n ),\n Fields AS (\n SELECT \n\t\t fies.profileEmployeeId,\n GROUP_CONCAT(DISTINCT fies.field ORDER BY fies.field SEPARATOR ', ') AS fields\n FROM profileEducation fies\n WHERE fies.field IS NOT NULL AND fies.field != ''\n GROUP BY fies.profileEmployeeId\n ),\n PositionDate AS (\n SELECT \n vcto.Years,\n vcto.Months,\n vcto.Days,\n vcto.profileEmployeeId\n FROM tenurePositionEmployee vcto\n ),\n PositionLevelDate AS (\n SELECT \n vctlo.Years,\n vctlo.Months,\n vctlo.Days,\n vctlo.profileEmployeeId\n FROM tenureLevelEmployee vctlo\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 eds.Educations,\n edls.educationLevels,\n degs.degrees,\n fies.fields,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age,\n vcto.Years,\n vcto.Months,\n vcto.Days,\n vctlo.Years AS levelYears,\n vctlo.Months AS levelMonths,\n vctlo.Days AS levelDays\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 Educations eds ON p.id = eds.profileEmployeeId\n LEFT JOIN EducationLevels edls ON p.id = edls.profileEmployeeId\n LEFT JOIN Degrees degs ON p.id = degs.profileEmployeeId\n LEFT JOIN Fields fies ON p.id = fies.profileEmployeeId\n LEFT JOIN PositionDate vcto ON p.id = vcto.profileEmployeeId\n LEFT JOIN PositionLevelDate vctlo ON p.id = vctlo.profileEmployeeId"]); +// await queryRunner.query(`CREATE VIEW \`view_current_tenure_officer\` AS +// WITH resultData AS ( +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days', +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber +// FROM ( +// SELECT +// commandDateAffect, +// commandDateSign, +// positionName, +// positionCee, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign, +// ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) - +// ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId +// FROM +// profileSalary +// WHERE +// commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16) +// ORDER BY +// commandDateAffect ASC, commandDateSign ASC +// ) AS groupedPosition +// WHERE +// prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign +// GROUP BY +// profileId, groupedId, positionName +// ) +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// days_diff, +// Years, +// Months, +// Days, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// orderNumber +// FROM resultData + +// UNION ALL + +// SELECT +// CURDATE() AS commandDateAffect, +// NULL AS positionName, +// NULL AS positionCee, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days', +// NULL AS posNo, +// NULL AS positionExecutive, +// NULL AS positionType, +// NULL AS positionLevel, +// NULL AS OrgRoot, +// NULL AS orgChild1, +// NULL AS orgChild2, +// NULL AS orgChild3, +// NULL AS orgChild4, +// NULL AS commandCode, +// NULL AS commandName, +// NULL AS commandNo, +// NULL AS commandYear, +// NULL AS remark, +// profileId, +// NULL AS orderNumber +// FROM resultData +// `); +// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization","VIEW","view_current_tenure_officer","WITH resultData AS (\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days',\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber\n FROM (\n SELECT\n commandDateAffect,\n commandDateSign,\n positionName,\n positionCee,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign,\n ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) -\n ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId\n FROM\n profileSalary\n WHERE\n commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16)\n ORDER BY\n commandDateAffect ASC, commandDateSign ASC\n ) AS groupedPosition\n WHERE\n prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign\n GROUP BY\n profileId, groupedId, positionName\n )\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n days_diff,\n Years,\n Months,\n Days,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n orderNumber\n FROM resultData\n\n UNION ALL\n\n SELECT\n CURDATE() AS commandDateAffect,\n NULL AS positionName,\n NULL AS positionCee,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days',\n NULL AS posNo,\n NULL AS positionExecutive,\n NULL AS positionType,\n NULL AS positionLevel,\n NULL AS OrgRoot,\n NULL AS orgChild1,\n NULL AS orgChild2,\n NULL AS orgChild3,\n NULL AS orgChild4,\n NULL AS commandCode,\n NULL AS commandName,\n NULL AS commandNo,\n NULL AS commandYear,\n NULL AS remark,\n profileId,\n NULL AS orderNumber\n FROM resultData"]); +// await queryRunner.query(`CREATE VIEW \`view_current_tenure_exc_officer\` AS +// WITH resultData AS ( +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days', +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// orgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber +// FROM ( +// SELECT +// commandDateAffect, +// commandDateSign, +// positionName, +// positionCee, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// orgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) - +// ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId +// FROM +// profileSalary +// WHERE +// commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16) AND +// positionExecutive <> '' +// ORDER BY +// commandDateAffect ASC, commandDateSign ASC +// ) AS groupedPositionExe +// GROUP BY +// groupedId, positionExecutive +// ) +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// days_diff, +// Years, +// Months, +// Days, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// orgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileId, +// orderNumber +// FROM resultData + +// UNION ALL + +// SELECT +// CURDATE() AS commandDateAffect, +// NULL AS positionName, +// NULL AS positionCee, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days', +// NULL AS posNo, +// NULL AS positionExecutive, +// NULL AS positionType, +// NULL AS positionLevel, +// NULL AS orgRoot, +// NULL AS orgChild1, +// NULL AS orgChild2, +// NULL AS orgChild3, +// NULL AS orgChild4, +// NULL AS commandCode, +// NULL AS commandName, +// NULL AS commandNo, +// NULL AS commandYear, +// NULL AS remark, +// profileId, +// NULL AS orderNumber +// FROM resultData +// `); +// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization","VIEW","view_current_tenure_exc_officer","WITH resultData AS (\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days',\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n orgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber\n FROM (\n SELECT\n commandDateAffect,\n commandDateSign,\n positionName,\n positionCee,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n orgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) -\n ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId\n FROM\n profileSalary\n WHERE\n commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16) AND\n positionExecutive <> ''\n ORDER BY\n commandDateAffect ASC, commandDateSign ASC\n ) AS groupedPositionExe\n GROUP BY\n groupedId, positionExecutive\n )\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n days_diff, \n Years,\n Months,\n Days,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n orgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileId,\n orderNumber\n FROM resultData\n\n UNION ALL\n\n SELECT\n CURDATE() AS commandDateAffect,\n NULL AS positionName,\n NULL AS positionCee,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days',\n NULL AS posNo,\n NULL AS positionExecutive,\n NULL AS positionType,\n NULL AS positionLevel,\n NULL AS orgRoot,\n NULL AS orgChild1,\n NULL AS orgChild2,\n NULL AS orgChild3,\n NULL AS orgChild4,\n NULL AS commandCode,\n NULL AS commandName,\n NULL AS commandNo,\n NULL AS commandYear,\n NULL AS remark,\n profileId,\n NULL AS orderNumber\n FROM resultData"]); +// await queryRunner.query(`CREATE VIEW \`view_current_tenure_employee\` AS +// WITH resultData AS ( +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff, +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF( +// DAY, +// LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days', +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileEmployeeId, +// ROW_NUMBER() OVER (PARTITION BY profileEmployeeId ORDER BY commandDateAffect ASC) AS orderNumber +// FROM ( +// SELECT +// commandDateAffect, +// commandDateSign, +// positionName, +// positionCee, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileEmployeeId, +// LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign, +// ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) - +// ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId +// FROM +// profileSalary +// WHERE +// commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16) +// ORDER BY +// commandDateAffect ASC, commandDateSign ASC +// ) AS groupedPosition +// WHERE +// prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign +// GROUP BY +// profileEmployeeId, groupedId, positionName +// ) +// SELECT +// commandDateAffect, +// positionName, +// positionCee, +// days_diff, +// Years, +// Months, +// Days, +// posNo, +// positionExecutive, +// positionType, +// positionLevel, +// OrgRoot, +// orgChild1, +// orgChild2, +// orgChild3, +// orgChild4, +// commandCode, +// commandName, +// commandNo, +// commandYear, +// remark, +// profileEmployeeId, +// orderNumber +// FROM resultData + +// UNION ALL + +// SELECT +// CURDATE() AS commandDateAffect, +// NULL AS positionName, +// NULL AS positionCee, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff, +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months', +// TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days', +// NULL AS posNo, +// NULL AS positionExecutive, +// NULL AS positionType, +// NULL AS positionLevel, +// NULL AS OrgRoot, +// NULL AS orgChild1, +// NULL AS orgChild2, +// NULL AS orgChild3, +// NULL AS orgChild4, +// NULL AS commandCode, +// NULL AS commandName, +// NULL AS commandNo, +// NULL AS commandYear, +// NULL AS remark, +// profileEmployeeId, +// NULL AS orderNumber +// FROM resultData +// `); + // await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization","VIEW","view_current_tenure_employee","WITH resultData AS (\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days',\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n ROW_NUMBER() OVER (PARTITION BY profileEmployeeId ORDER BY commandDateAffect ASC) AS orderNumber\n FROM (\n SELECT\n commandDateAffect,\n commandDateSign,\n positionName,\n positionCee,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign,\n ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) -\n ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId\n FROM\n profileSalary\n WHERE\n commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16)\n ORDER BY\n commandDateAffect ASC, commandDateSign ASC\n ) AS groupedPosition\n WHERE\n prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign\n GROUP BY\n profileEmployeeId, groupedId, positionName\n )\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n days_diff,\n Years,\n Months,\n Days,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n orderNumber\n FROM resultData\n\n UNION ALL\n\n SELECT\n CURDATE() AS commandDateAffect,\n NULL AS positionName,\n NULL AS positionCee,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days',\n NULL AS posNo,\n NULL AS positionExecutive,\n NULL AS positionType,\n NULL AS positionLevel,\n NULL AS OrgRoot,\n NULL AS orgChild1,\n NULL AS orgChild2,\n NULL AS orgChild3,\n NULL AS orgChild4,\n NULL AS commandCode,\n NULL AS commandName,\n NULL AS commandNo,\n NULL AS commandYear,\n NULL AS remark,\n profileEmployeeId,\n NULL AS orderNumber\n FROM resultData"]); + } + + public async down(queryRunner: QueryRunner): Promise { + // await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_current_tenure_employee","hrms_organization"]); + // await queryRunner.query(`DROP VIEW \`view_current_tenure_employee\``); + // await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_current_tenure_exc_officer","hrms_organization"]); + // await queryRunner.query(`DROP VIEW \`view_current_tenure_exc_officer\``); + // await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_current_tenure_officer","hrms_organization"]); + // await queryRunner.query(`DROP VIEW \`view_current_tenure_officer\``); + // await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","hrms_organization"]); + // await queryRunner.query(`DROP VIEW \`view_registry_employee\``); + // await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","hrms_organization"]); + // await queryRunner.query(`DROP VIEW \`view_registry_officer\``); + // await queryRunner.query(`ALTER TABLE \`position\` DROP FOREIGN KEY \`FK_bfcf6ec9f1e08c2a351be8df46a\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`FLAG_EDUCATION\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`FLAG_EDUCATION\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`MAJOR_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`MAJOR_CODE\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`FUND_COURSE_CODE\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`FUND_COURSE_CODE\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionLevelName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionLevelName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionTypeName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionTypeName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PosNoName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PosNoName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`SalaryRef\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`SalaryRef\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`posNo\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`posNo\` varchar(40) NULL COMMENT 'เลขที่ตำแหน่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP PRIMARY KEY`); + // await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`mp_command_num\``); + // await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`mp_command_num\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ID\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`ProfileId\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionName\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`PositionSalaryAmount\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`Amount\``); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` DROP COLUMN \`Order\``); + await queryRunner.query(`ALTER TABLE \`profileAssistance\` DROP COLUMN \`status\``); + // await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`MINOR_CODE\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`ACTIVE_STATUS\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`GROUPWORK_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`GROUPWORK_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_LEVEL\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_CEE_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_COMMAND_DATE_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_TO_NAME_E\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_TO_NAME_CODE_E\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`CUR_YEAR_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_COMMAND_NUM_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_CODE_SIT_ABB_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_CODE_SIT_EDIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MVMENT_OF\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MVMENT_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`REC_STATUS\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POSITION_CATG\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`COUNTRY_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`PROVINCE_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`PLACE_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`COURSE_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`COURSE_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_FLAG_1\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`UPDATE_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`CREATE_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`AUDIT_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`AUDIT_FLAG\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_FLAG_CURRENT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`UP_C_FLAG\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_FLAG\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_POS_STATUS\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FILL_APP_FLAG\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SPECIALIST_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_POS_ABB_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_POS_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_POS_ABB_NAME_1\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_POS_CODE_1\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`ADMIN_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY_LEVEL_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`WORK_LINE_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`DEPARTMENT_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`DIVISION_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SECTION_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`JOB_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_FORCE_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_YEAR\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`CUR_YEAR\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`USER_UPDATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`USER_CREATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SPECIAL_AMT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SAL_POS_AMOUNT_2\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SAL_POS_AMOUNT_1\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_CEE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`DEPARTMENT_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`DIVISION_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SECTION_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`JOB_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_TO_NAME_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_COMMAND_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`ORDER_MOVE_POSITION\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`REMARK\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`ADMIN_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SPECIALIST_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`WORK_LINE_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_TO_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_CODE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`POS_NUM_NAME\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_COMMAND_NUM\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`SALARY\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`MP_POS_DATE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`FLAG_PERSON_TYPE\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`HR_POSITION_OFFICER\` ADD \`CIT\` text NULL`); + // await queryRunner.query(`ALTER TABLE \`IMPORT_ORG\` ADD \`HRMS_DIV_CODE\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`IMPORT_ORG\` ADD \`HRMS_DEP_CODE\` mediumtext NULL`); + // await queryRunner.query(`ALTER TABLE \`IMPORT_ORG\` ADD \`ORDER\` 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 \`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_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 \`ProfileSalaries\` ADD \`PositionRef\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionPathSideName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionLineName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionExecutiveName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`OrgName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`CLevel\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`AgencyName\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`SalaryStatus\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`CommandTypeName\` longtext NOT NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`RefCommandNo\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`RefCommandDate\` datetime(6) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PosNoEmployee\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionEmployeePositionSideId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionEmployeePositionId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionEmployeeLevelId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionEmployeeGroupId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`OrganizationShortNameId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionTypeId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionPathSideId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionLineId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionLevelId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionExecutiveSideId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionExecutiveId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`OcId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PositionId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`PosNoId\` char(36) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`SalaryClass\` longtext NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`IsActive\` tinyint(1) NULL`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandNo\` varchar(255) NULL COMMENT 'เลขที่คำสั่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`remark\` varchar(255) NULL COMMENT 'หมายเหตุ'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionCee\` varchar(255) NULL COMMENT 'ระดับของเก่าที่ยังไม่เทียบเท่าแบบแท่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionName\` text NULL COMMENT 'ตำแหน่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`posNoAbb\` varchar(40) NULL COMMENT 'ตัวย่อเลขที่ตำแหน่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandName\` varchar(255) NULL COMMENT 'ชื่อประเภทคำสั่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandDateAffect\` datetime NULL COMMENT 'คำสั่งมีผลวันที่'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandDateSign\` datetime NULL COMMENT 'คำสั่งวันที่'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandYear\` int NULL COMMENT 'ปีที่ออกคำสั่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`orgChild4\` varchar(255) NULL COMMENT 'child4 name'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`orgChild3\` varchar(255) NULL COMMENT 'child3 name'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`orgChild2\` varchar(255) NULL COMMENT 'child2 name'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`orgChild1\` varchar(255) NULL COMMENT 'child1 name'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`orgRoot\` varchar(255) NULL COMMENT 'root name'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`amountSpecial\` double NULL COMMENT 'เงินพิเศษ' DEFAULT '0'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`commandId\` varchar(40) NULL COMMENT 'คีย์นอก(FK)ของตาราง command'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`isGovernment\` tinyint NULL COMMENT 'เข้ารับราชการ'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`dateGovernment\` datetime NULL COMMENT 'วันที่'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`profileEmployeeId\` varchar(40) NULL COMMENT 'คีย์นอก(FK)ของตาราง ProfileEmployee'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`order\` int NULL COMMENT 'เรียงลำดับใหมาตามการนำเข้า'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionLevel\` varchar(255) NULL COMMENT 'ระดับตำแหน่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionType\` varchar(255) NULL COMMENT 'ประเภทตำแหน่ง'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionExecutive\` varchar(255) NULL COMMENT 'ตำแหน่งทางการบริหาร'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`profileId\` varchar(40) NULL COMMENT 'คีย์นอก(FK)ของตาราง profile'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`mouthSalaryAmount\` double NULL COMMENT 'เงินค่าตอบแทนรายเดือน' DEFAULT '0'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`positionSalaryAmount\` double NULL COMMENT 'เงินประจำตำแหน่ง' DEFAULT '0'`); + // await queryRunner.query(`ALTER TABLE \`ProfileSalaries\` ADD \`amount\` double NULL COMMENT 'เงินเดือนฐาน' DEFAULT '0'`); + // await queryRunner.query(`ALTER TABLE \`position\` ADD CONSTRAINT \`FK_bfcf6ec9f1e08c2a351be8df46a\` FOREIGN KEY (\`posMasterId\`) REFERENCES \`posMaster\`(\`id\`) ON DELETE RESTRICT ON UPDATE RESTRICT`); + } + +} From 68f680d841e1d999086aad5cca57e0648f078923 Mon Sep 17 00:00:00 2001 From: mamoss <> Date: Tue, 1 Apr 2025 11:28:58 +0700 Subject: [PATCH 09/10] edit path --- src/controllers/ProfileAssistanceController.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/ProfileAssistanceController.ts b/src/controllers/ProfileAssistanceController.ts index 7858c7dd..4367ec6e 100644 --- a/src/controllers/ProfileAssistanceController.ts +++ b/src/controllers/ProfileAssistanceController.ts @@ -203,7 +203,6 @@ export class ProfileAssistanceController extends Controller { public async editStatusProfileAssistance( @Body() body: { status: string; refId: string }, @Request() req: RequestWithUser, - @Path() assistanceId: string, ) { const record = await this.profileAssistanceRepo.findOneBy({ refId: body.refId }); if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); From ac5d6b015ab0c103ace909abe2d9c43a540d283b Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Tue, 1 Apr 2025 11:34:22 +0700 Subject: [PATCH 10/10] feat: add message type to websocket --- src/services/rabbitmq.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 3bb45ef6..79f9ef7f 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -126,6 +126,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { sendWebSocket( "send-command-notification", { + success: true, message: `ระบบทำการออกคำสั่งเลขที่ ${command.commandNo}/${command.commandYear + 543}`, payload: command, }, @@ -169,6 +170,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { sendWebSocket( "send-command-notification", { + success: true, message: `ระบบออกคำสั่งเลขที่ ${command.commandNo}/${command.commandYear + 543} เสร็จสิ้น`, payload: command, }, @@ -179,6 +181,15 @@ async function handler(msg: amqp.ConsumeMessage): Promise { }) .catch((e) => { console.error(e); + sendWebSocket( + "send-command-notification", + { + success: false, + message: `ระบบออกคำสั่งเลขที่ ${command.commandNo}/${command.commandYear + 543} ผิดพลาด`, + payload: command, + }, + { userId: user.sub }, + ).catch(console.error); return false; }); }