Merge branch 'develop'

* develop:
  add path salary position of user
  add path salary employee position
  update view
  comment rabbit
  add dateRetireLaw
  migrate
  no message
  checkpoint
  fix report & comment
  add salary position
  fix report & comment reset pass
  reset password (test)
  reset password (test)
  ปรับออกคำสั่งลงตำแหน่ง
This commit is contained in:
Warunee Tamkoo 2025-02-24 16:24:45 +07:00
commit 8f22a7b7d4
27 changed files with 2870 additions and 1326 deletions

File diff suppressed because it is too large Load diff

View file

@ -258,7 +258,7 @@ export class DPISController extends Controller {
//relations: ["current_holders", "current_holders.orgRoot"],
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileLeaves: {
dateLeaveStart: "ASC",
@ -314,7 +314,7 @@ export class DPISController extends Controller {
salaries: profile.profileSalary.map((item) => {
return {
posNo: item.posNo,
position: item.position,
position: item.positionName,
positionType: item.positionType,
positionLevel: item.positionLevel,
amount: item.amount,

View file

@ -20,7 +20,6 @@ import * as fs from "fs";
import * as path from "path";
const { createConnection } = require("typeorm");
import csvParser from "csv-parser";
import { HR_POSITION_OFFICER } from "../entities/HR_POSITION_OFFICER";
import { HR_PERSONAL_OFFICER_FAMILY } from "../entities/HR_PERSONAL_OFFICER_FAMILY";
const BATCH_SIZE = 1000;
@ -47,7 +46,8 @@ import { OrgRevision } from "../entities/OrgRevision";
import { OFFICER } from "../entities/OFFICER";
import { Position } from "../entities/Position";
import { PosMaster } from "../entities/PosMaster";
import { positionOfficer } from "../entities/positionOfficer";
// import { uuidv7 } from "uuidv7";
@Route("api/v1/org/upload")
@Tags("UPLOAD")
@Security("bearerAuth")
@ -61,7 +61,7 @@ export class ImportDataController extends Controller {
private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee);
private posLevelRepo = AppDataSource.getRepository(PosLevel);
private posTypeRepo = AppDataSource.getRepository(PosType);
private HR_POSITION_OFFICERRepo = AppDataSource.getRepository(HR_POSITION_OFFICER);
private positionOfficerRepo = AppDataSource.getRepository(positionOfficer);
private HR_PERSONAL_OFFICER_FAMILYRepo = AppDataSource.getRepository(HR_PERSONAL_OFFICER_FAMILY);
private HR_EDUCATIONRepo = AppDataSource.getRepository(HR_EDUCATION);
private HR_PERSONAL_OFFICER_ADDRESSRepo = AppDataSource.getRepository(
@ -323,125 +323,321 @@ export class ImportDataController extends Controller {
async UploadFileSQLSalary(@Request() request: { user: Record<string, any> }) {
let rowCount = 0;
let null_: any = null;
let sqlStatements: string[] = [];
const [profiles, total] = await AppDataSource.getRepository(Profile)
.createQueryBuilder("profile")
.select(["profile.citizenId", "profile.id"])
.orderBy("profile.citizenId", "ASC")
.skip(20000)
// .where("profile.citizenId = '3101702379675'")
.skip(0)
.take(10000)
.getManyAndCount();
// for (var i = 1; i <= total / BATCH_SIZE; i++) {
// const profiles = await AppDataSource.getRepository(Profile)
// .createQueryBuilder("profile")
// .select(["profile.citizenId", "profile.id"])
// .orderBy("profile.citizenId", "ASC")
// .skip((i - 1) * BATCH_SIZE)
// .take(BATCH_SIZE)
// .getMany();
var _profiles: ProfileSalary[] = [];
const filePath = path.join(__dirname, "salaryProfile.csv");
// CSV Header
let csvData = `"id","createdAt","createdUserId","lastUpdatedAt","lastUpdateUserId","createdFullName","lastUpdateFullName","profileId","profileEmployeeId","order","commandNo","commandYear","commandDateSign","commandDateAffect","commandCode","commandName","posNoAbb","posNo","positionName","positionType","positionLevel","positionCee","orgRoot","orgChild1","orgChild2","orgChild3","orgChild4","positionExecutive","amount","amountSpecial","positionSalaryAmount","mouthSalaryAmount","remark","dateGovernment","isGovernment","commandId"\n`;
fs.appendFile(filePath, csvData, (err) => {
if (err) {
console.error("Error writing CSV file:", err);
} else {
console.log("Salary profiles successfully written to salaryProfile.csv");
}
});
await Promise.all(
profiles.map(async (_item) => {
console.log(">>>>>>>>>>>>>>>>>>>" + _item.citizenId);
const existingProfile = await this.HR_POSITION_OFFICERRepo.find({
where: { CIT: _item.citizenId, FLAG_PERSON_TYPE: "1" },
select: [
"CIT",
"MP_POS_DATE",
"SALARY",
"MP_COMMAND_NUM",
"POS_NUM_NAME",
"POS_NUM_CODE",
"FLAG_TO_NAME",
"WORK_LINE_NAME",
"SPECIALIST_NAME",
"ADMIN_NAME",
"REMARK",
"ORDER_MOVE_POSITION",
"SAL_POS_AMOUNT_1",
"SAL_POS_AMOUNT_2",
"SPECIAL_AMT",
"MP_COMMAND_DATE",
"FLAG_TO_NAME_CODE",
"DEPARTMENT_NAME",
"DIVISION_NAME",
"SECTION_NAME",
"JOB_NAME",
"MP_CEE",
"USER_CREATE",
"USER_UPDATE",
],
const existingProfile = await this.positionOfficerRepo.find({
where: { citizenId: _item.citizenId, flag_person_type: "1" },
order: {
mp_pos_date: "ASC",
order_move_position: "ASC",
},
});
let order = 1;
await Promise.all(
existingProfile.map(async (item) => {
rowCount++;
const profileSalary = new ProfileSalary();
profileSalary.date = item.MP_POS_DATE
? new Date(item.MP_POS_DATE.replace(" +0700 +07:00", ""))
: null_;
const SALARY: any =
item.SALARY == null || item.SALARY == "" ? null_ : Number(item.SALARY);
profileSalary.amount = SALARY;
const SAL_POS_AMOUNT_1: any =
item.SAL_POS_AMOUNT_1 == null || item.SAL_POS_AMOUNT_1 == ""
? null_
: Number(item.SAL_POS_AMOUNT_1);
const SAL_POS_AMOUNT_2: any =
item.SAL_POS_AMOUNT_2 == null || item.SAL_POS_AMOUNT_2 == ""
? null_
: Number(item.SAL_POS_AMOUNT_2);
profileSalary.positionSalaryAmount = SAL_POS_AMOUNT_1 ?? SAL_POS_AMOUNT_2;
const SPECIAL_AMT: any =
item.SPECIAL_AMT == null || item.SPECIAL_AMT == "" ? null_ : Number(item.SPECIAL_AMT);
profileSalary.amountSpecial = SPECIAL_AMT;
const profileSalary: any = new ProfileSalary();
profileSalary.profileId = _item.id;
profileSalary.refCommandNo = item.MP_COMMAND_NUM;
profileSalary.posNo = item.POS_NUM_NAME + item.POS_NUM_CODE;
profileSalary.position = item.WORK_LINE_NAME;
profileSalary.positionPathSide = item.SPECIALIST_NAME;
profileSalary.positionExecutive = item.ADMIN_NAME;
profileSalary.templateDoc = item.REMARK;
profileSalary.refCommandDate =
item.MP_COMMAND_DATE == ""
? new Date(item.MP_COMMAND_DATE.replace(" +0700 +07:00", ""))
: null_;
profileSalary.refCommandCode = item.FLAG_TO_NAME_CODE;
profileSalary.refCommandName = item.FLAG_TO_NAME;
profileSalary.orgRoot = item.DEPARTMENT_NAME;
profileSalary.orgChild1 = item.DIVISION_NAME;
profileSalary.orgChild2 = item.SECTION_NAME;
profileSalary.orgChild3 = item.JOB_NAME;
if (item.DEPARTMENT_CODE == "50") {
profileSalary.orgRoot = item.DIVISION_NAME;
profileSalary.orgChild1 = item.SECTION_NAME;
profileSalary.orgChild2 = item.JOB_NAME;
profileSalary.order = order;
order = order + 1;
profileSalary.commandNo = item.mp_command_num;
profileSalary.commandYear = item.cur_year > 2500 ? item.cur_year - 543 : item.cur_year;
profileSalary.commandDateSign = item.mp_command_date;
profileSalary.commandDateAffect = item.mp_pos_date;
if (
[
"0",
"11",
"22",
"31",
"39",
"45",
"46",
"47",
"49",
"50",
"51",
"56",
"60",
"61",
"62",
"99",
].includes(item.flag_to_name_code)
) {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (["1", "58"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "1";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
} else if (["23"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "2";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
} else if (["3", "6", "34", "36", "37"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "3";
profileSalary.commandName = "แต่งตั้ง ย้าย";
} else if (["10", "55"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (["14"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
["8", "20", "24", "25", "43", "44", "52", "66", "67"].includes(item.flag_to_name_code)
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (["-"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "7";
profileSalary.commandName = "เงินพิเศษอื่น ๆ";
} else if (["38", "40", "53", "54"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (["12"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (["2", "18"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "10";
profileSalary.commandName = "บรรจุกลับ";
} else if (["4", "32", "33"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (["5"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (["15", "95"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "13";
profileSalary.commandName = "แก้ไขคำสั่ง";
} else if (["19"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (["27", "35"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "15";
profileSalary.commandName = "ลาออกจากราชการ";
} else if (
["13", "17", "21", "28", "29", "30", "59"].includes(item.flag_to_name_code)
) {
profileSalary.commandCode = "16";
profileSalary.commandName = "พ้นจากราชการ";
} else if (["7", "9", "16", "26", "63", "68"].includes(item.flag_to_name_code)) {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
}
profileSalary.mpCee = item.MP_CEE;
const ORDER_MOVE_POSITION: any =
item.ORDER_MOVE_POSITION == null || item.ORDER_MOVE_POSITION == ""
if (
item.flag_to_name == "" &&
(item.flag_to_name_code == "เลื่อน 1 ขั้นและเลื่อนระดับ" ||
item.flag_to_name_code == "เลื่อน 0.5 ขั้นและเลื่อนระดับ" ||
item.flag_to_name_code == "ลาศึกษาต่อ")
) {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (item.flag_to_name == "" && item.flag_to_name_code == "เลื่อนเงินเดือน") {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
item.flag_to_name == "" &&
(item.flag_to_name_code == "ปรับตามบัญชีเงินเดือนใหม่" ||
item.flag_to_name_code == "เลื่อนเงินเดือน" ||
item.flag_to_name_code == "ปรับเงินเดือนตาม กพ.")
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (
item.flag_to_name == "" &&
item.flag_to_name_code == "แต่งตั้งตามการปรับปรุงโครงฯ"
) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (
item.flag_to_name == "" &&
item.flag_to_name_code == "พ้นทดลองปฏิบัติราชการ"
) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (item.flag_to_name == "" && item.flag_to_name_code == "ให้โอนมา") {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (
item.flag_to_name == "" &&
item.flag_to_name_code == "โอนไปปฏิบัติราชการที่อื่น"
) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (item.flag_to_name == "" && item.flag_to_name_code == "ยกเลิกคำสั่ง") {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (item.flag_to_name == "" && item.flag_to_name_code == "รักษาการในตำแหน่ง") {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
}
profileSalary.posNoAbb = item.pos_num_name;
profileSalary.posNo = item.pos_num_code;
profileSalary.positionName = item.work_line_name;
var positionType = "";
var positionLevel = "";
if (item.mp_cee == "21") {
positionType = "ทั่วไป";
positionLevel = "ปฏิบัติงาน";
} else if (item.mp_cee == "22") {
positionType = "ทั่วไป";
positionLevel = "ชำนาญงาน";
} else if (item.mp_cee == "23") {
positionType = "ทั่วไป";
positionLevel = "อาวุโส";
} else if (item.mp_cee == "24") {
positionType = "ทั่วไป";
positionLevel = "อาวุโสเฉพาะสายงานที่กำหนด";
} else if (item.mp_cee == "25") {
positionType = "ทั่วไป";
positionLevel = "ทักษะพิเศษ";
} else if (item.mp_cee == "26") {
positionType = "วิชาการ";
positionLevel = "ปฏิบัติการ";
} else if (item.mp_cee == "27") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการ";
} else if (item.mp_cee == "28") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการพิเศษ";
} else if (item.mp_cee == "29") {
positionType = "วิชาการ";
positionLevel = "เชี่ยวชาญ";
} else if (item.mp_cee == "30") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิ";
} else if (item.mp_cee == "31") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิเฉพาะสายงานที่กำหนด";
} else if (item.mp_cee == "32") {
positionType = "อำนวยการ";
positionLevel = "ต้น";
} else if (item.mp_cee == "33") {
positionType = "อำนวยการ";
positionLevel = "สูง";
} else if (item.mp_cee == "34") {
positionType = "บริหาร";
positionLevel = "ต้น";
} else if (item.mp_cee == "35") {
positionType = "บริหาร";
positionLevel = "สูง";
} else {
profileSalary.positionCee = item.mp_cee;
}
profileSalary.positionType = positionType;
profileSalary.positionLevel = positionLevel;
profileSalary.orgRoot = item.department_name;
profileSalary.orgChild1 = item.division_name;
profileSalary.orgChild2 = item.section_name;
profileSalary.orgChild3 = item.job_name;
if (item.department_code == "50") {
profileSalary.orgRoot = item.division_name;
profileSalary.orgChild1 = item.section_name;
profileSalary.orgChild2 = item.job_name;
}
profileSalary.positionExecutive = item.admin_name;
profileSalary.amount = item.salary;
profileSalary.remark = item.remark;
const sal_pos_amount_1: any =
item.sal_pos_amount_1 == null || item.sal_pos_amount_1 == ""
? null_
: Number(item.ORDER_MOVE_POSITION);
profileSalary.order = ORDER_MOVE_POSITION;
: Number(item.sal_pos_amount_1);
const sal_pos_amount_2: any =
item.sal_pos_amount_2 == null || item.sal_pos_amount_2 == ""
? null_
: Number(item.sal_pos_amount_2);
profileSalary.positionSalaryAmount = sal_pos_amount_1 ?? sal_pos_amount_2;
const special_amt: any =
item.special_amt == null || item.special_amt == "" ? null_ : Number(item.special_amt);
profileSalary.amountSpecial = special_amt;
profileSalary.createdUserId = request.user.sub;
profileSalary.createdFullName = request.user.name;
profileSalary.lastUpdateUserId = request.user.sub;
profileSalary.lastUpdateFullName = request.user.name;
profileSalary.createdAt =
item.USER_CREATE == ""
? new Date(item.USER_CREATE.replace(" +0700 +07:00", ""))
: new Date();
profileSalary.lastUpdatedAt =
item.USER_UPDATE == ""
? new Date(item.USER_UPDATE.replace(" +0700 +07:00", ""))
: new Date();
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
await this.salaryRepo.save(profileSalary);
profileSalary.createdAt = new Date();
profileSalary.lastUpdatedAt = new Date();
// const result = uuidv7();
// profileSalary.id = result;
// console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
// // Generate SQL INSERT Statement using TypeORM QueryBuilder but don't execute it
// const queryBuilder = AppDataSource.createQueryBuilder()
// .insert()
// .into(ProfileSalary)
// .values(profileSalary);
// const sql = queryBuilder.getSql();
// sqlStatements.push(sql);
// _profiles.push(profileSalary);
// save to file
// Define the output file path
// CSV Header
// let csvData = `"id","createdAt","createdUserId","lastUpdatedAt","lastUpdateUserId","createdFullName","lastUpdateFullName","profileId","profileEmployeeId","order","commandNo","commandYear","commandDateSign","commandDateAffect","commandCode","commandName","posNoAbb","posNo","positionName","positionType","positionLevel","positionCee","orgRoot","orgChild1","orgChild2","orgChild3","orgChild4","positionExecutive","amount","amountSpecial","positionSalaryAmount","mouthSalaryAmount","remark","dateGovernment","isGovernment","commandId"\n`;
// Loop through each salary profile and format data as CSV
// _profiles.forEach((profile) => {
csvData = `"${profileSalary.id || "NULL"}","${profileSalary.createdAt?.toISOString()?.split("T")[0] || "NULL"}","${profileSalary.createdUserId || "NULL"}","${profileSalary.lastUpdatedAt?.toISOString()?.split("T")[0] || "NULL"}","${profileSalary.lastUpdateUserId || "NULL"}","${profileSalary.createdFullName || "NULL"}","${profileSalary.lastUpdateFullName || "NULL"}","${profileSalary.profileId || "NULL"}","${profileSalary.profileEmployeeId || "NULL"}","${profileSalary.order || "NULL"}","${profileSalary.commandNo || "NULL"}","${profileSalary.commandYear || "NULL"}","${profileSalary.commandDateSign?.toISOString()?.split("T")[0] || "NULL"}","${profileSalary.commandDateAffect?.toISOString()?.split("T")[0] || "NULL"}","${profileSalary.commandCode || "NULL"}","${profileSalary.commandName || "NULL"}","${profileSalary.posNoAbb || "NULL"}","${profileSalary.posNo || "NULL"}","${profileSalary.positionName || "NULL"}","${profileSalary.positionType || "NULL"}","${profileSalary.positionLevel || "NULL"}","${profileSalary.positionCee || "NULL"}","${profileSalary.orgRoot || "NULL"}","${profileSalary.orgChild1 || "NULL"}","${profileSalary.orgChild2 || "NULL"}","${profileSalary.orgChild3 || "NULL"}","${profileSalary.orgChild4 || "NULL"}","${profileSalary.positionExecutive || "NULL"}","${profileSalary.amount || 0}","${profileSalary.amountSpecial || 0}","${profileSalary.positionSalaryAmount || 0}","${profileSalary.mouthSalaryAmount || 0}","${profileSalary.remark || "NULL"}","${profileSalary.dateGovernment?.toISOString()?.split("T")[0] || "NULL"}","${profileSalary.isGovernment || "NULL"}","${profileSalary.commandId || "NULL"}"\n`;
// });
// Write the CSV data to the file
fs.appendFile(filePath, csvData.replace('"NULL"', "NULL"), (err) => {
if (err) {
console.error("Error writing CSV file:", err);
} else {
console.log(
"Salary profiles successfully written to salaryProfile.csv: " + rowCount,
);
}
});
// await this.salaryRepo.save(profileSalary);
}),
);
order = 1;
}),
);
console.log(rowCount);
// // console.log(rowCount);
// // Define the output file path
// const filePath = path.join(__dirname, "salaryProfile.csv");
// // CSV Header
// let csvData = `"id","createdAt","createdUserId","lastUpdatedAt","lastUpdateUserId","createdFullName","lastUpdateFullName","profileId","profileEmployeeId","order","commandNo","commandYear","commandDateSign","commandDateAffect","commandCode","commandName","posNoAbb","posNo","positionName","positionType","positionLevel","positionCee","orgRoot","orgChild1","orgChild2","orgChild3","orgChild4","positionExecutive","amount","amountSpecial","positionSalaryAmount","mouthSalaryAmount","remark","dateGovernment","isGovernment","commandId"\n`;
// // Loop through each salary profile and format data as CSV
// _profiles.forEach((profile) => {
// csvData += `"${profile.id || "NULL"}","${profile.createdAt?.toISOString()?.split("T")[0] || "NULL"}","${profile.createdUserId || "NULL"}","${profile.lastUpdatedAt?.toISOString()?.split("T")[0] || "NULL"}","${profile.lastUpdateUserId || "NULL"}","${profile.createdFullName || "NULL"}","${profile.lastUpdateFullName || "NULL"}","${profile.profileId || "NULL"}","${profile.profileEmployeeId || "NULL"}","${profile.order || "NULL"}","${profile.commandNo || "NULL"}","${profile.commandYear || "NULL"}","${profile.commandDateSign?.toISOString()?.split("T")[0] || "NULL"}","${profile.commandDateAffect?.toISOString()?.split("T")[0] || "NULL"}","${profile.commandCode || "NULL"}","${profile.commandName || "NULL"}","${profile.posNoAbb || "NULL"}","${profile.posNo || "NULL"}","${profile.positionName || "NULL"}","${profile.positionType || "NULL"}","${profile.positionLevel || "NULL"}","${profile.positionCee || "NULL"}","${profile.orgRoot || "NULL"}","${profile.orgChild1 || "NULL"}","${profile.orgChild2 || "NULL"}","${profile.orgChild3 || "NULL"}","${profile.orgChild4 || "NULL"}","${profile.positionExecutive || "NULL"}","${profile.amount || 0}","${profile.amountSpecial || 0}","${profile.positionSalaryAmount || 0}","${profile.mouthSalaryAmount || 0}","${profile.remark || "NULL"}","${profile.dateGovernment?.toISOString()?.split("T")[0] || "NULL"}","${profile.isGovernment || "NULL"}","${profile.commandId || "NULL"}"\n`;
// });
// // Write the CSV data to the file
// fs.writeFile(filePath, csvData, (err) => {
// if (err) {
// console.error("Error writing CSV file:", err);
// } else {
// console.log("Salary profiles successfully written to salaryProfile.csv");
// }
// });
return new HttpSuccess();
}
@ -457,115 +653,75 @@ export class ImportDataController extends Controller {
.createQueryBuilder("profile")
.select(["profile.citizenId", "profile.id"])
.orderBy("profile.citizenId", "ASC")
// .skip(0)
// .take(20)
.skip(0)
.take(10000)
.getManyAndCount();
// for (var i = 1; i <= total / BATCH_SIZE; i++) {
// const profiles = await AppDataSource.getRepository(ProfileEmployee)
// .createQueryBuilder("profile")
// .select(["profile.citizenId", "profile.id"])
// .orderBy("profile.citizenId", "ASC")
// .skip((i - 1) * BATCH_SIZE)
// .take(BATCH_SIZE)
// .getMany();
await Promise.all(
profiles.map(async (_item) => {
const existingProfile = await this.HR_POSITION_OFFICERRepo.find({
where: { CIT: _item.citizenId },
select: [
"CIT",
"MP_POS_DATE",
"SALARY",
"MP_COMMAND_NUM",
"POS_NUM_NAME",
"POS_NUM_CODE",
"FLAG_TO_NAME",
"WORK_LINE_NAME",
"SPECIALIST_NAME",
"ADMIN_NAME",
"REMARK",
"ORDER_MOVE_POSITION",
"SAL_POS_AMOUNT_1",
"SAL_POS_AMOUNT_2",
"SPECIAL_AMT",
"MP_COMMAND_DATE",
"FLAG_TO_NAME_CODE",
"DEPARTMENT_NAME",
"DIVISION_NAME",
"SECTION_NAME",
"JOB_NAME",
"MP_CEE",
"USER_CREATE",
"USER_UPDATE",
],
const existingProfile = await this.positionOfficerRepo.find({
where: { citizenId: _item.citizenId, flag_person_type: "7" },
});
await Promise.all(
existingProfile.map(async (item) => {
rowCount++;
const profileSalary = new ProfileSalary();
profileSalary.date =
item.MP_POS_DATE == ""
? new Date(item.MP_POS_DATE.replace(" +0700 +07:00", ""))
: null_;
const SALARY: any =
item.SALARY == null || item.SALARY == "" ? null_ : Number(item.SALARY);
profileSalary.amount = SALARY;
const SAL_POS_AMOUNT_1: any =
item.SAL_POS_AMOUNT_1 == null || item.SAL_POS_AMOUNT_1 == ""
const profileSalary: any = new ProfileSalary();
profileSalary.profileId = _item.id;
profileSalary.order = item.order_move_position; ///
profileSalary.commandNo = item.mp_command_num;
profileSalary.commandYear = item.cur_year;
profileSalary.commandDateSign = item.mp_command_date;
profileSalary.commandDateAffect = item.mp_pos_date;
profileSalary.commandCode = item.flag_to_name_code;
profileSalary.commandName = item.flag_to_name;
profileSalary.posNoAbb = item.pos_num_name;
profileSalary.posNo = item.pos_num_code;
profileSalary.positionName = item.work_line_name;
profileSalary.positionCee = item.mp_cee;
profileSalary.positionType = item.mp_cee;
profileSalary.positionLevel = item.mp_cee;
profileSalary.orgRoot = item.department_name;
profileSalary.orgChild1 = item.division_name;
profileSalary.orgChild2 = item.section_name;
profileSalary.orgChild3 = item.job_name;
if (item.department_code == "50") {
profileSalary.orgRoot = item.division_name;
profileSalary.orgChild1 = item.section_name;
profileSalary.orgChild2 = item.job_name;
}
profileSalary.positionExecutive = item.admin_name;
profileSalary.amount = item.salary;
profileSalary.remark = item.remark;
const sal_pos_amount_1: any =
item.sal_pos_amount_1 == null || item.sal_pos_amount_1 == ""
? null_
: Number(item.SAL_POS_AMOUNT_1);
const SAL_POS_AMOUNT_2: any =
item.SAL_POS_AMOUNT_2 == null || item.SAL_POS_AMOUNT_2 == ""
: Number(item.sal_pos_amount_1);
const sal_pos_amount_2: any =
item.sal_pos_amount_2 == null || item.sal_pos_amount_2 == ""
? null_
: Number(item.SAL_POS_AMOUNT_2);
profileSalary.positionSalaryAmount = SAL_POS_AMOUNT_1 ?? SAL_POS_AMOUNT_2;
const SPECIAL_AMT: any =
item.SPECIAL_AMT == null || item.SPECIAL_AMT == "" ? null_ : Number(item.SPECIAL_AMT);
profileSalary.amountSpecial = SPECIAL_AMT;
profileSalary.profileEmployeeId = _item.id;
profileSalary.refCommandNo = item.MP_COMMAND_NUM;
profileSalary.posNo = item.POS_NUM_NAME + item.POS_NUM_CODE;
profileSalary.position = item.WORK_LINE_NAME;
profileSalary.positionPathSide = item.SPECIALIST_NAME;
profileSalary.positionExecutive = item.ADMIN_NAME;
profileSalary.templateDoc = item.REMARK;
profileSalary.refCommandDate =
item.MP_COMMAND_DATE == ""
? new Date(item.MP_COMMAND_DATE.replace(" +0700 +07:00", ""))
: null_;
profileSalary.refCommandCode = item.FLAG_TO_NAME_CODE;
profileSalary.refCommandName = item.FLAG_TO_NAME;
profileSalary.orgRoot = item.DEPARTMENT_NAME;
profileSalary.orgChild1 = item.DIVISION_NAME;
profileSalary.orgChild2 = item.SECTION_NAME;
profileSalary.orgChild3 = item.JOB_NAME;
profileSalary.mpCee = item.MP_CEE;
const ORDER_MOVE_POSITION: any =
item.ORDER_MOVE_POSITION == null || item.ORDER_MOVE_POSITION == ""
? null_
: Number(item.ORDER_MOVE_POSITION);
profileSalary.order = ORDER_MOVE_POSITION;
: Number(item.sal_pos_amount_2);
profileSalary.positionSalaryAmount = sal_pos_amount_1 ?? sal_pos_amount_2;
const special_amt: any =
item.special_amt == null || item.special_amt == "" ? null_ : Number(item.special_amt);
profileSalary.amountSpecial = special_amt;
profileSalary.commandId;
profileSalary.createdUserId = request.user.sub;
profileSalary.createdFullName = request.user.name;
profileSalary.lastUpdateUserId = request.user.sub;
profileSalary.lastUpdateFullName = request.user.name;
profileSalary.createdAt =
item.USER_CREATE == ""
? new Date(item.USER_CREATE.replace(" +0700 +07:00", ""))
: new Date();
profileSalary.lastUpdatedAt =
item.USER_UPDATE == ""
? new Date(item.USER_UPDATE.replace(" +0700 +07:00", ""))
: new Date();
profileSalary.createdAt = new Date();
profileSalary.lastUpdatedAt = new Date();
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
await this.salaryRepo.save(profileSalary);
// save to file
// await this.salaryRepo.save(profileSalary);
}),
);
}),
);
// }
console.log(rowCount);
return new HttpSuccess();
}
@ -1472,12 +1628,12 @@ export class ImportDataController extends Controller {
const allId = _profileOff.concat(_profileEmp);
for (var i = 1; i <= 1000; i++) {
const HR_POSITION_OFFICER = await this.HR_POSITION_OFFICERRepo.find({
where: { CIT: Not(In(allId)) },
const positionOfficer = await this.positionOfficerRepo.find({
where: { citizenId: Not(In(allId)) },
take: 1000,
skip: 0,
});
this.HR_POSITION_OFFICERRepo.remove(HR_POSITION_OFFICER);
this.positionOfficerRepo.remove(positionOfficer);
// const HR_PERSONAL_OFFICER_FAMILY = await this.HR_PERSONAL_OFFICER_FAMILYRepo.find({
// where: { CIT: Not(In(allId)) },
// take: 1000,

View file

@ -289,7 +289,7 @@ export class OrganizationDotnetController extends Controller {
where: { keycloak: keycloakId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -318,7 +318,7 @@ export class OrganizationDotnetController extends Controller {
where: { keycloak: keycloakId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -918,7 +918,7 @@ export class OrganizationDotnetController extends Controller {
where: { id: profileId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -944,7 +944,7 @@ export class OrganizationDotnetController extends Controller {
where: { id: profileId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -1571,7 +1571,7 @@ export class OrganizationDotnetController extends Controller {
where: { citizenId: citizenId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -1597,7 +1597,7 @@ export class OrganizationDotnetController extends Controller {
where: { citizenId: citizenId },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -2166,7 +2166,7 @@ export class OrganizationDotnetController extends Controller {
where: { current_holders: { orgRootId: rootId } },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -2383,7 +2383,7 @@ export class OrganizationDotnetController extends Controller {
where: { current_holders: { orgRootId: rootId } },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -2539,7 +2539,7 @@ export class OrganizationDotnetController extends Controller {
})),
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",

View file

@ -18,7 +18,7 @@ import { format } from "path";
import { viewProfileEvaluation } from "../entities/view/viewProfileEvaluation";
import { viewProfileEmployeeEvaluation } from "../entities/view/viewProfileEmployeeEvaluation";
import Extension from "../interfaces/extension";
import { resetPassword } from "../keycloak";
@Route("api/v1/org/unauthorize")
@Tags("OrganizationUnauthorize")
@Response(
@ -32,8 +32,24 @@ export class OrganizationUnauthorizeController extends Controller {
private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee);
private profileAssessmentRepo = AppDataSource.getRepository(ProfileAssessment);
private viewProfileEvaluationRepo = AppDataSource.getRepository(viewProfileEvaluation);
private viewProfileEmployeeEvaluationRepo = AppDataSource.getRepository(viewProfileEmployeeEvaluation);
private viewProfileEmployeeEvaluationRepo = AppDataSource.getRepository(
viewProfileEmployeeEvaluation,
);
@Post("user/reset-password")
async forgetPassword(
@Body()
body: {
username: string;
},
) {
const result = await resetPassword(body.username);
if (!result) {
throw new Error("Failed. Cannot change password.");
}
return result;
}
/**
* API (unauthorize)
*
@ -1001,7 +1017,7 @@ export class OrganizationUnauthorizeController extends Controller {
where: { current_holders: { orgRootId: rootId } },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -1080,7 +1096,7 @@ export class OrganizationUnauthorizeController extends Controller {
where: { current_holders: { orgRootId: rootId } },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
profileInsignias: {
receiveDate: "DESC",
@ -1170,7 +1186,6 @@ export class OrganizationUnauthorizeController extends Controller {
return new HttpSuccess("Email verified successfully.");
}
/**
* API 5
*
@ -1208,80 +1223,102 @@ export class OrganizationUnauthorizeController extends Controller {
// where:{
// ...condition
// }
})
if(conType == "EMPLOYEE"){
lists = await this.viewProfileEmployeeEvaluationRepo.find({})
});
if (conType == "EMPLOYEE") {
lists = await this.viewProfileEmployeeEvaluationRepo.find({});
}
const groupData: any = {};
const groupData: any = {};
const year = new Date().getFullYear();
const years = [year, year - 1, year - 2, year - 3, year - 4];
lists.forEach((item: any) => {
if (!groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId]) {
groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId] = {
profileId: conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId,
yearAPR1: "-", periodAPR1: "-", resultAPR1: "-",
yearOCT1: "-", periodOCT1: "-", resultOCT1: "-",
yearAPR2: "-", periodAPR2: "-", resultAPR2: "-",
yearOCT2: "-", periodOCT2: "-", resultOCT2: "-",
yearAPR3: "-", periodAPR3: "-", resultAPR3: "-",
yearOCT3: "-", periodOCT3: "-", resultOCT3: "-",
yearAPR4: "-", periodAPR4: "-", resultAPR4: "-",
yearOCT4: "-", periodOCT4: "-", resultOCT4: "-",
yearAPR5: "-", periodAPR5: "-", resultAPR5: "-",
yearOCT5: "-", periodOCT5: "-", resultOCT5: "-"
if (!groupData[conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId]) {
groupData[conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId] = {
profileId: conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId,
yearAPR1: "-",
periodAPR1: "-",
resultAPR1: "-",
yearOCT1: "-",
periodOCT1: "-",
resultOCT1: "-",
yearAPR2: "-",
periodAPR2: "-",
resultAPR2: "-",
yearOCT2: "-",
periodOCT2: "-",
resultOCT2: "-",
yearAPR3: "-",
periodAPR3: "-",
resultAPR3: "-",
yearOCT3: "-",
periodOCT3: "-",
resultOCT3: "-",
yearAPR4: "-",
periodAPR4: "-",
resultAPR4: "-",
yearOCT4: "-",
periodOCT4: "-",
resultOCT4: "-",
yearAPR5: "-",
periodAPR5: "-",
resultAPR5: "-",
yearOCT5: "-",
periodOCT5: "-",
resultOCT5: "-",
};
}
const yearIndex = years.indexOf(parseInt(item.year));
const yearIndex = years.indexOf(parseInt(item.year));
if (yearIndex !== -1) {
const yearSuffix = yearIndex + 1;
const yearKey = `year${item.period}${yearSuffix}`;
const periodKey = `period${item.period}${yearSuffix}`;
const resultKey = `result${item.period}${yearSuffix}`;
groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][yearKey] = item.year;
groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][periodKey] = item.period;
groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][resultKey] = item.result;
groupData[conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId][yearKey] =
item.year;
groupData[conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId][periodKey] =
item.period;
groupData[conType == "EMPLOYEE" ? item.profileEmployeeId : item.profileId][resultKey] =
item.result;
}
});
const formattedResults = Object.values(groupData).map((x: any) => ({
profileId: x.profileId,
yearAPR1: x.yearAPR1,
periodAPR1: x.periodAPR1,
resultAPR1: x.resultAPR1?Extension.textPoint(x.resultAPR1):"-",
resultAPR1: x.resultAPR1 ? Extension.textPoint(x.resultAPR1) : "-",
yearOCT1: x.yearOCT1,
periodOCT1: x.periodOCT1,
resultOCT1: x.resultOCT1?Extension.textPoint(x.resultOCT1):"-",
resultOCT1: x.resultOCT1 ? Extension.textPoint(x.resultOCT1) : "-",
yearAPR2: x.yearAPR2,
periodAPR2: x.periodAPR2,
resultAPR2: x.resultAPR2?Extension.textPoint(x.resultAPR2):"-",
resultAPR2: x.resultAPR2 ? Extension.textPoint(x.resultAPR2) : "-",
yearOCT2: x.yearOCT2,
periodOCT2: x.periodOCT2,
resultOCT2: x.resultOCT2?Extension.textPoint(x.resultOCT2):"-",
resultOCT2: x.resultOCT2 ? Extension.textPoint(x.resultOCT2) : "-",
yearAPR3: x.yearAPR3,
periodAPR3: x.periodAPR3,
resultAPR3: x.resultAPR3?Extension.textPoint(x.resultAPR3):"-",
resultAPR3: x.resultAPR3 ? Extension.textPoint(x.resultAPR3) : "-",
yearOCT3: x.yearOCT3,
periodOCT3: x.periodOCT3,
resultOCT3: x.resultOCT3?Extension.textPoint(x.resultOCT3):"-",
resultOCT3: x.resultOCT3 ? Extension.textPoint(x.resultOCT3) : "-",
yearAPR4: x.yearAPR4,
periodAPR4: x.periodAPR4,
resultAPR4: x.resultAPR4?Extension.textPoint(x.resultAPR4):"-",
resultAPR4: x.resultAPR4 ? Extension.textPoint(x.resultAPR4) : "-",
yearOCT4: x.yearOCT4,
periodOCT4: x.periodOCT4,
resultOCT4: x.resultOCT4?Extension.textPoint(x.resultOCT4):"-",
resultOCT4: x.resultOCT4 ? Extension.textPoint(x.resultOCT4) : "-",
yearAPR5: x.yearAPR5,
periodAPR5: x.periodAPR5,
resultAPR5: x.resultAPR5?Extension.textPoint(x.resultAPR5):"-",
resultAPR5: x.resultAPR5 ? Extension.textPoint(x.resultAPR5) : "-",
yearOCT5: x.yearOCT5,
periodOCT5: x.periodOCT5,
resultOCT5: x.resultOCT5?Extension.textPoint(x.resultOCT5):"-",
resultOCT5: x.resultOCT5 ? Extension.textPoint(x.resultOCT5) : "-",
}));
return new HttpSuccess(formattedResults);
}
// @Patch("retirement")
// public async updateStatusRetirement(
// @Body()
@ -1306,10 +1343,10 @@ export class OrganizationUnauthorizeController extends Controller {
// profiles.push(_profile);
// })
// );
// await this.profileRepo.save(profiles);
// await this.profileRepo.save(profiles);
// return new HttpSuccess();
// }
// @Patch("retirement-employee")
// public async updateStatusRetirementEmp(
// @Body()
@ -1334,7 +1371,7 @@ export class OrganizationUnauthorizeController extends Controller {
// profiles.push(_profile);
// })
// );
// await this.profileEmpRepo.save(profiles);
// await this.profileEmpRepo.save(profiles);
// return new HttpSuccess();
// }
}

File diff suppressed because it is too large Load diff

View file

@ -138,7 +138,7 @@ export class ProfileEmployeeController extends Controller {
where: { id: id },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
},
});
@ -229,39 +229,40 @@ export class ProfileEmployeeController extends Controller {
const salary_raw = await this.salaryRepo.find({
select: [
"date",
"position",
"commandDateAffect",
"posNo",
"positionType",
"positionLevel",
"positionSalaryAmount",
"refCommandNo",
"commandNo",
"amount",
"templateDoc",
"position",
"remark",
"positionName",
"orgRoot",
"orgChild1",
"orgChild2",
"orgChild3",
"orgChild4",
"mpCee",
"positionCee",
"positionExecutive",
],
where: { profileEmployeeId: id },
order: { date: "ASC" },
order: { commandDateAffect: "ASC" },
});
const salarys =
salary_raw.length > 1
? salary_raw.slice(1).map((item) => ({
date: item.date ? Extension.ToThaiNumber(Extension.ToThaiShortDate(item.date)) : null,
position: item.position != null ? item.position : "-",
date: item.commandDateAffect
? Extension.ToThaiNumber(Extension.ToThaiShortDate(item.commandDateAffect))
: null,
position: item.positionName != null ? item.positionName : "-",
posNo: item.posNo != null ? Extension.ToThaiNumber(item.posNo) : null,
orgRoot: item.orgRoot,
orgChild1: item.orgChild1,
orgChild2: item.orgChild2,
orgChild3: item.orgChild3,
orgChild4: item.orgChild4,
mpCee: item.mpCee,
positionCee: item.positionCee,
positionExecutive: item.positionExecutive,
}))
: [
@ -274,7 +275,7 @@ export class ProfileEmployeeController extends Controller {
orgChild2: null,
orgChild3: null,
orgChild4: null,
mpCee: null,
positionCee: null,
positionExecutive: null,
},
];
@ -323,8 +324,8 @@ export class ProfileEmployeeController extends Controller {
`${_regisAddres}${_subDistrict}${_district}${_province}${registrationZipCode}`,
),
date:
salary_raw.length > 0 && salary_raw[0].date != null
? Extension.ToThaiNumber(Extension.ToThaiShortDate(salary_raw[0].date))
salary_raw.length > 0 && salary_raw[0].commandDateAffect != null
? Extension.ToThaiNumber(Extension.ToThaiShortDate(salary_raw[0].commandDateAffect))
: "",
positionName: profile.position != null ? profile.position : "",
appointText:
@ -336,12 +337,12 @@ export class ProfileEmployeeController extends Controller {
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].posNo))
: "",
position:
salary_raw.length > 0 && salary_raw[0].position != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].position))
salary_raw.length > 0 && salary_raw[0].positionName != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].positionName))
: "",
mpCee:
salary_raw.length > 0 && salary_raw[0].mpCee != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].mpCee))
positionCee:
salary_raw.length > 0 && salary_raw[0].positionCee != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].positionCee))
: "",
positionExecutive:
salary_raw.length > 0 && salary_raw[0].positionExecutive != null
@ -643,15 +644,15 @@ export class ProfileEmployeeController extends Controller {
];
const salary_raw = await this.salaryRepo.find({
select: [
"date",
"position",
"commandDateAffect",
"positionName",
"posNo",
"positionType",
"positionLevel",
"positionSalaryAmount",
"refCommandNo",
"commandNo",
"amount",
"templateDoc",
"remark",
],
where: { profileEmployeeId: id },
order: { order: "ASC" },
@ -660,15 +661,15 @@ export class ProfileEmployeeController extends Controller {
const salarys =
salary_raw.length > 0
? salary_raw.map((item) => ({
SalaryDate: item.date
? Extension.ToThaiNumber(Extension.ToThaiFullDate2(item.date))
SalaryDate: item.commandDateAffect
? Extension.ToThaiNumber(Extension.ToThaiFullDate2(item.commandDateAffect))
: null,
Position: item.position != null ? Extension.ToThaiNumber(item.position) : null,
Position: item.positionName != null ? Extension.ToThaiNumber(item.positionName) : null,
PosNo: item.posNo != null ? Extension.ToThaiNumber(item.posNo) : null,
Salary:
item.amount != null ? Extension.ToThaiNumber(item.amount.toLocaleString()) : null,
Rank: item.positionLevel != null ? Extension.ToThaiNumber(item.positionLevel) : null,
RefAll: item.templateDoc ? Extension.ToThaiNumber(item.templateDoc) : null,
RefAll: item.remark ? Extension.ToThaiNumber(item.remark) : null,
PositionLevel:
item.positionLevel != null ? Extension.ToThaiNumber(item.positionLevel) : null,
PositionType: item.positionType ?? null,
@ -1705,7 +1706,7 @@ export class ProfileEmployeeController extends Controller {
@Query() isAll?: boolean,
@Query() retireType?: string,
@Query() sortBy: string = "current_holders.posMasterNo",
@Query() sort: "ASC"|"DESC" = "ASC",
@Query() sort: "ASC" | "DESC" = "ASC",
) {
let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_EMP");
let queryLike =
@ -4432,7 +4433,7 @@ export class ProfileEmployeeController extends Controller {
body: {
result: {
id: string;
templateDoc: string;
remark: string;
amount: Double | null;
positionSalaryAmount: Double | null;
mouthSalaryAmount: Double | null;
@ -4462,7 +4463,7 @@ export class ProfileEmployeeController extends Controller {
positionType: profile.posTypeNameTemp,
positionLevel: profile.posLevelNameTemp,
refCommandNo: v.refCommandNo,
templateDoc: v.templateDoc,
remark: v.remark,
})
.then(async () => {
profile.statusTemp = "DONE";

View file

@ -133,7 +133,7 @@ export class ProfileEmployeeTempController extends Controller {
where: { id: id },
order: {
profileSalary: {
date: "DESC",
commandDateAffect: "DESC",
},
},
});
@ -224,38 +224,40 @@ export class ProfileEmployeeTempController extends Controller {
const salary_raw = await this.salaryRepo.find({
select: [
"date",
"position",
"commandDateAffect",
"positionName",
"posNo",
"positionType",
"positionLevel",
"positionSalaryAmount",
"refCommandNo",
"commandNo",
"amount",
"templateDoc",
"remark",
"orgRoot",
"orgChild1",
"orgChild2",
"orgChild3",
"orgChild4",
"mpCee",
"positionCee",
"positionExecutive",
],
where: { profileEmployeeId: id },
order: { date: "ASC" },
order: { commandDateAffect: "ASC" },
});
const salarys =
salary_raw.length > 1
? salary_raw.slice(1).map((item) => ({
date: item.date ? Extension.ToThaiNumber(Extension.ToThaiShortDate(item.date)) : null,
position: item.position != null ? item.position : "-",
date: item.commandDateAffect
? Extension.ToThaiNumber(Extension.ToThaiShortDate(item.commandDateAffect))
: null,
position: item.positionName != null ? item.positionName : "-",
posNo: item.posNo != null ? Extension.ToThaiNumber(item.posNo) : null,
orgRoot: item.orgRoot,
orgChild1: item.orgChild1,
orgChild2: item.orgChild2,
orgChild3: item.orgChild3,
orgChild4: item.orgChild4,
mpCee: item.mpCee,
positionCee: item.positionCee,
positionExecutive: item.positionExecutive,
}))
: [
@ -268,7 +270,7 @@ export class ProfileEmployeeTempController extends Controller {
orgChild2: null,
orgChild3: null,
orgChild4: null,
mpCee: null,
positionCee: null,
positionExecutive: null,
},
];
@ -316,8 +318,8 @@ export class ProfileEmployeeTempController extends Controller {
`${_regisAddres}${_subDistrict}${_district}${_province}${registrationZipCode}`,
),
date:
salary_raw.length > 0 && salary_raw[0].date != null
? Extension.ToThaiNumber(Extension.ToThaiShortDate(salary_raw[0].date))
salary_raw.length > 0 && salary_raw[0].commandDateAffect != null
? Extension.ToThaiNumber(Extension.ToThaiShortDate(salary_raw[0].commandDateAffect))
: "",
positionName: profile.position != null ? profile.position : "",
appointText:
@ -329,12 +331,12 @@ export class ProfileEmployeeTempController extends Controller {
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].posNo))
: "",
position:
salary_raw.length > 0 && salary_raw[0].position != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].position))
salary_raw.length > 0 && salary_raw[0].positionName != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].positionName))
: "",
mpCee:
salary_raw.length > 0 && salary_raw[0].mpCee != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].mpCee))
positionCee:
salary_raw.length > 0 && salary_raw[0].positionCee != null
? Extension.ToThaiNumber(Extension.ToThaiNumber(salary_raw[0].positionCee))
: "",
positionExecutive:
salary_raw.length > 0 && salary_raw[0].positionExecutive != null
@ -366,8 +368,10 @@ export class ProfileEmployeeTempController extends Controller {
salarys: salarys.map((item) => {
return {
...item,
mpCee:
item.mpCee == null ? "" : Extension.ToThaiNumber(Extension.ToThaiNumber(item.mpCee)),
positionCee:
item.positionCee == null
? ""
: Extension.ToThaiNumber(Extension.ToThaiNumber(item.positionCee)),
org: `${item.orgChild4 && item.orgChild4 != "-" ? item.orgChild4 + " " : ""}${item.orgChild3 && item.orgChild3 != "-" ? item.orgChild3 + " " : ""}${item.orgChild2 && item.orgChild2 != "-" ? item.orgChild2 + " " : ""}${item.orgChild1 && item.orgChild1 != "-" ? item.orgChild1 + " " : ""}${item.orgRoot && item.orgRoot != "-" ? item.orgRoot + " " : ""}`,
};
}),
@ -638,15 +642,15 @@ export class ProfileEmployeeTempController extends Controller {
];
const salary_raw = await this.salaryRepo.find({
select: [
"date",
"position",
"commandDateAffect",
"positionName",
"posNo",
"positionType",
"positionLevel",
"positionSalaryAmount",
"refCommandNo",
"commandNo",
"amount",
"templateDoc",
"remark",
],
where: { profileEmployeeId: id },
order: { order: "ASC" },
@ -655,15 +659,15 @@ export class ProfileEmployeeTempController extends Controller {
const salarys =
salary_raw.length > 0
? salary_raw.map((item) => ({
SalaryDate: item.date
? Extension.ToThaiNumber(Extension.ToThaiFullDate2(item.date))
SalaryDate: item.commandDateAffect
? Extension.ToThaiNumber(Extension.ToThaiFullDate2(item.commandDateAffect))
: null,
Position: item.position != null ? Extension.ToThaiNumber(item.position) : null,
Position: item.positionName != null ? Extension.ToThaiNumber(item.positionName) : null,
PosNo: item.posNo != null ? Extension.ToThaiNumber(item.posNo) : null,
Salary:
item.amount != null ? Extension.ToThaiNumber(item.amount.toLocaleString()) : null,
Rank: item.positionLevel != null ? Extension.ToThaiNumber(item.positionLevel) : null,
RefAll: item.templateDoc ? Extension.ToThaiNumber(item.templateDoc) : null,
RefAll: item.remark ? Extension.ToThaiNumber(item.remark) : null,
PositionLevel:
item.positionLevel != null ? Extension.ToThaiNumber(item.positionLevel) : null,
PositionType: item.positionType ?? null,
@ -1820,16 +1824,18 @@ export class ProfileEmployeeTempController extends Controller {
let profileSalary;
if (profile.profileSalary && profile.profileSalary.length > 0) {
profileSalary = profile.profileSalary.reduce((latest, current) => {
return new Date(current.date) > new Date(latest.date) ? current : latest;
return new Date(current.commandDateAffect) > new Date(latest.commandDateAffect)
? current
: latest;
});
}
return {
id: profile.id,
fullName: `${profile.prefix}${profile.firstName} ${profile.lastName}`,
citizenId: profile.citizenId,
position: profileSalary ? profileSalary.position : null,
position: profileSalary ? profileSalary.positionName : null,
posNo: profileSalary ? profileSalary.posNo : null,
date: profileSalary ? profileSalary.date : null,
date: profileSalary ? profileSalary.commandDateAffect : null,
};
});
@ -3482,7 +3488,7 @@ export class ProfileEmployeeTempController extends Controller {
body: {
result: {
id: string;
templateDoc: string;
remark: string;
amount: Double | null;
positionSalaryAmount: Double | null;
mouthSalaryAmount: Double | null;
@ -3513,7 +3519,7 @@ export class ProfileEmployeeTempController extends Controller {
positionType: profile.posTypeNameTemp,
positionLevel: profile.posLevelNameTemp,
refCommandNo: v.refCommandNo,
templateDoc: v.templateDoc,
remark: v.remark,
})
.then(async () => {
profile.statusTemp = "DONE";

View file

@ -43,6 +43,19 @@ export class ProfileSalaryController extends Controller {
return new HttpSuccess(record);
}
@Get("position/user")
public async getSalaryPositionUser(@Request() request: { user: Record<string, any> }) {
const profile = await this.profileRepo.findOneBy({ keycloak: request.user.sub });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
const record = await this.salaryRepo.find({
where: { profileId: profile.id },
order: { order: "ASC" },
});
return new HttpSuccess(record);
}
@Get("{profileId}")
public async getSalary(@Path() profileId: string, @Request() req: RequestWithUser) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_OFFICER");
@ -55,6 +68,18 @@ export class ProfileSalaryController extends Controller {
return new HttpSuccess(record);
}
@Get("position/{profileId}")
public async getPositionSalary(@Path() profileId: string, @Request() req: RequestWithUser) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_OFFICER");
if (_workflow == false)
await new permission().PermissionOrgUserGet(req, "SYS_REGISTRY_OFFICER", profileId);
const record = await this.salaryRepo.find({
where: { profileId: profileId },
order: { order: "ASC" },
});
return new HttpSuccess(record);
}
@Get("admin/{profileId}")
public async getSalaryAdmin(@Path() profileId: string, @Request() req: RequestWithUser) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_SALARY_OFFICER");
@ -119,7 +144,6 @@ export class ProfileSalaryController extends Controller {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};
@ -165,7 +189,6 @@ export class ProfileSalaryController extends Controller {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};
@ -210,7 +233,6 @@ export class ProfileSalaryController extends Controller {
history.lastUpdateFullName = req.user.name;
history.createdUserId = req.user.sub;
history.createdFullName = req.user.name;
record.refCommandDate = new Date();
history.createdAt = new Date();
history.lastUpdatedAt = new Date();

View file

@ -47,6 +47,19 @@ export class ProfileSalaryEmployeeController extends Controller {
return new HttpSuccess(record);
}
@Get("position/user")
public async getSalaryPositionUser(@Request() request: { user: Record<string, any> }) {
const profile = await this.profileRepo.findOneBy({ keycloak: request.user.sub });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
const record = await this.salaryRepo.find({
where: { profileEmployeeId: profile.id },
order: { order: "ASC" },
});
return new HttpSuccess(record);
}
@Get("{profileId}")
public async getSalaryEmployee(@Path() profileId: string, @Request() req: RequestWithUser) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_EMP");
@ -59,6 +72,21 @@ export class ProfileSalaryEmployeeController extends Controller {
return new HttpSuccess(record);
}
@Get("position/{profileId}")
public async getPositionSalaryEmployee(
@Path() profileId: string,
@Request() req: RequestWithUser,
) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_EMP");
if (_workflow == false)
await new permission().PermissionOrgUserGet(req, "SYS_REGISTRY_EMP", profileId);
const record = await this.salaryRepo.find({
where: { profileEmployeeId: profileId },
order: { order: "ASC" },
});
return new HttpSuccess(record);
}
@Get("admin/{profileId}")
public async getSalaryEmployeeAdmin(@Path() profileId: string, @Request() req: RequestWithUser) {
let _workflow = await new permission().Workflow(req, profileId, "SYS_WAGE");
@ -130,7 +158,6 @@ export class ProfileSalaryEmployeeController extends Controller {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};
@ -180,7 +207,6 @@ export class ProfileSalaryEmployeeController extends Controller {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};
@ -230,7 +256,6 @@ export class ProfileSalaryEmployeeController extends Controller {
history.lastUpdateFullName = req.user.name;
history.createdUserId = req.user.sub;
history.createdFullName = req.user.name;
record.refCommandDate = new Date();
history.createdAt = new Date();
history.lastUpdatedAt = new Date();

View file

@ -122,7 +122,6 @@ export class ProfileSalaryEmployeeTempController extends Controller {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};
@ -159,7 +158,6 @@ export class ProfileSalaryEmployeeTempController extends Controller {
record.lastUpdateUserId = req.user.sub;
record.lastUpdateFullName = req.user.name;
record.lastUpdatedAt = new Date();
record.refCommandDate = new Date();
history.lastUpdateUserId = req.user.sub;
history.lastUpdateFullName = req.user.name;
history.createdUserId = req.user.sub;

View file

@ -174,23 +174,31 @@ export class ReportController extends Controller {
async registryOfficer(
@Query() node?: number,
@Query() nodeId?: string,
@Query() posTypeName?: string,
@Query() posLevelName?: string,
@Query() posType?: string,
@Query() posLevel?: string,
@Query() position?: string,
@Query() posExecutiveName?: string,
@Query() positionExecutive?: string,
@Query() gender?: string,
@Query() relationship?: string,
@Query() degree?: string,
@Query() startDateAppoint?: Date,
@Query() endDateAppoint?: Date,
@Query() status?: string,
@Query() education?: string,
@Query() dateStart?: Date,
@Query() dateEnd?: Date,
@Query() ageMin?: number,
@Query() ageMax?: number,
@Query() isProbation?: boolean,
@Query() isRetire?: boolean,
@Query() isRetireLaw?: boolean,
@Query() retireType?: string,
@Query() sortBy: string = "posMasterNo",
@Query() sort: "ASC" | "DESC" = "ASC",
) {
const _null: any = null;
if(!dateStart) {
dateStart = _null
}
if(!dateEnd) {
dateEnd = _null
}
if (ageMin && (ageMin < 18 || ageMin > 60)) {
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60");
}
@ -216,23 +224,28 @@ export class ReportController extends Controller {
nodeCondition = "registryOfficer.orgChild4Id = :nodeId";
}
let dateAppointCondition = "1=1";
if (startDateAppoint && endDateAppoint) {
if (dateStart && dateEnd) {
dateAppointCondition =
"DATE(registryOfficer.dateAppoint) >= :startDateAppoint AND DATE(registryOfficer.dateAppoint) <= :endDateAppoint";
} else if (startDateAppoint) {
} else if (dateStart) {
dateAppointCondition = "DATE(registryOfficer.dateAppoint) >= :startDateAppoint";
} else if (endDateAppoint) {
} else if (dateEnd) {
dateAppointCondition = "DATE(registryOfficer.dateAppoint) <= :endDateAppoint";
}
const IsLeavecondition = ["registryOfficer.isLeave = :isLeave"];
const parameters: any = { isLeave: isRetire };
if (retireType && retireType.trim() !== "") {
IsLeavecondition.push("registryOfficer.leaveType = :retireType");
parameters.retireType = retireType;
}
let retireLawCondition = "1=1";
if(isRetireLaw) {
retireLawCondition =
"DATE(registryOfficer.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryOfficer.dateRetireLaw) <= :endDateRetireLaw";
}
const [lists, total] = await AppDataSource.getRepository(viewRegistryOfficer)
.createQueryBuilder("registryOfficer")
.where(nodeCondition, {
@ -243,66 +256,72 @@ export class ReportController extends Controller {
ageMax,
})
.andWhere(dateAppointCondition, {
startDateAppoint: startDateAppoint?.toISOString().split("T")[0],
endDateAppoint: endDateAppoint?.toISOString().split("T")[0],
startDateAppoint: dateStart?.toISOString().split("T")[0],
endDateAppoint: dateEnd?.toISOString().split("T")[0],
})
.andWhere(retireLawCondition, {
startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)?.toISOString().split("T")[0],
endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999).toISOString().split("T")[0],
})
.andWhere("registryOfficer.isProbation = :isProbation", {
isProbation: isProbation,
})
.andWhere(IsLeavecondition.join(" AND "), parameters)
.andWhere(
new Brackets((qb) => {
qb.orWhere(
posTypeName != null && posTypeName != ""
? "registryOfficer.posTypeName LIKE :posTypeName"
: "1=1",
{
posTypeName: `%${posTypeName}%`,
},
);
qb.orWhere(
posLevelName != null && posLevelName != ""
? "registryOfficer.posLevelName LIKE :posLevelName"
: "1=1",
{
posLevelName: `%${posLevelName}%`,
},
);
qb.orWhere(
position != null && position != "" ? "registryOfficer.position LIKE :position" : "1=1",
{
position: `%${position}%`,
},
);
qb.orWhere(
posExecutiveName != null && posExecutiveName != ""
? "registryOfficer.posExecutiveName LIKE :posExecutiveName"
: "1=1",
{
posExecutiveName: `%${posExecutiveName}%`,
},
);
qb.orWhere(
gender != null && gender != "" ? "registryOfficer.gender LIKE :gender" : "1=1",
{
gender: `%${gender}%`,
},
);
qb.orWhere(
relationship != null && relationship != ""
? "registryOfficer.relationship LIKE :relationship"
: "1=1",
{
relationship: `%${relationship}%`,
},
);
qb.orWhere(
degree != null && degree != "" ? "registryOfficer.degree LIKE :degree" : "1=1",
{
degree: `%${degree}%`,
},
);
}),
posType != null && posType != ""
? "registryOfficer.posTypeName LIKE :posTypeName"
: "1=1",
{
posTypeName: `%${posType}%`,
}
)
.andWhere(
posLevel != null && posLevel != ""
? "registryOfficer.posLevelName LIKE :posLevelName"
: "1=1",
{
posLevelName: `%${posLevel}%`,
}
)
.andWhere(
position != null && position != ""
? "registryOfficer.position LIKE :position"
: "1=1",
{
position: `%${position}%`,
}
)
.andWhere(
positionExecutive != null && positionExecutive != ""
? "registryOfficer.posExecutiveName LIKE :posExecutiveName"
: "1=1",
{
posExecutiveName: `%${positionExecutive}%`,
}
)
.andWhere(
gender != null && gender != ""
? "registryOfficer.gender LIKE :gender"
: "1=1",
{
gender: `%${gender}%`,
}
)
.andWhere(
status != null && status != ""
? "registryOfficer.relationship LIKE :relationship"
: "1=1",
{
relationship: `%${status}%`,
}
)
.andWhere(
education != null && education != ""
? "registryOfficer.degree LIKE :degree"
: "1=1",
{
degree: `%${education}%`,
}
)
.orderBy(`registryOfficer.${sortBy}`, sort)
.getManyAndCount();
@ -336,6 +355,8 @@ export class ReportController extends Controller {
gender: x.gender,
relationship: x.relationship,
dateAppoint: x.dateAppoint,
dateRetire: x.dateRetire,
dateRetireLaw: x.dateRetireLaw,
birthdate: x.birthdate,
degree: x.degree,
age: x.age,
@ -469,22 +490,30 @@ export class ReportController extends Controller {
async registryEmployee(
@Query() node?: number,
@Query() nodeId?: string,
@Query() posTypeName?: string,
@Query() posLevelName?: string,
@Query() posType?: string,
@Query() posLevel?: string,
@Query() position?: string,
@Query() gender?: string,
@Query() relationship?: string,
@Query() degree?: string,
@Query() startDateAppoint?: Date,
@Query() endDateAppoint?: Date,
@Query() status?: string,
@Query() education?: string,
@Query() dateStart?: Date,
@Query() dateEnd?: Date,
@Query() isProbation?: boolean,
@Query() isRetire?: boolean,
@Query() isRetireLaw?: boolean,
@Query() retireType?: string,
@Query() ageMin?: number,
@Query() ageMax?: number,
@Query() sortBy: string = "posMasterNo",
@Query() sort: "ASC" | "DESC" = "ASC",
) {
const _null: any = null;
if(!dateStart) {
dateStart = _null
}
if(!dateEnd) {
dateEnd = _null
}
if (ageMin && (ageMin < 18 || ageMin > 60)) {
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60");
}
@ -510,22 +539,28 @@ export class ReportController extends Controller {
nodeCondition = "registryEmployee.orgChild4Id = :nodeId";
}
let dateAppointCondition = "1=1";
if (startDateAppoint && endDateAppoint) {
if (dateStart && dateEnd) {
dateAppointCondition =
"DATE(registryEmployee.dateAppoint) >= :startDateAppoint AND DATE(registryEmployee.dateAppoint) <= :endDateAppoint";
} else if (startDateAppoint) {
} else if (dateStart) {
dateAppointCondition = "DATE(registryEmployee.dateAppoint) >= :startDateAppoint";
} else if (endDateAppoint) {
} else if (dateEnd) {
dateAppointCondition = "DATE(registryEmployee.dateAppoint) <= :endDateAppoint";
}
const IsLeavecondition = ["registryEmployee.isLeave = :isLeave"];
const parameters: any = { isLeave: isRetire };
if (retireType && retireType.trim() !== "") {
IsLeavecondition.push("registryEmployee.leaveType = :retireType");
parameters.retireType = retireType;
}
let retireLawCondition = "1=1";
if(isRetireLaw) {
retireLawCondition =
"DATE(registryEmployee.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryEmployee.dateRetireLaw) <= :endDateRetireLaw";
}
const [lists, total] = await AppDataSource.getRepository(viewRegistryEmployee)
.createQueryBuilder("registryEmployee")
.where(nodeCondition, {
@ -536,8 +571,12 @@ export class ReportController extends Controller {
ageMax,
})
.andWhere(dateAppointCondition, {
startDateAppoint: startDateAppoint?.toISOString().split("T")[0],
endDateAppoint: endDateAppoint?.toISOString().split("T")[0],
startDateAppoint: dateStart?.toISOString().split("T")[0],
endDateAppoint: dateEnd?.toISOString().split("T")[0],
})
.andWhere(retireLawCondition, {
startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)?.toISOString().split("T")[0],
endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999).toISOString().split("T")[0],
})
.andWhere("registryEmployee.isProbation = :isProbation", {
isProbation: isProbation,
@ -545,50 +584,52 @@ export class ReportController extends Controller {
.andWhere(IsLeavecondition.join(" AND "), parameters)
.andWhere("registryEmployee.employeeClass = 'PERM'")
.andWhere(
new Brackets((qb) => {
qb.orWhere(
posTypeName != null && posTypeName != ""
? "registryEmployee.posTypeName LIKE :posTypeName"
: "1=1",
{
posTypeName: `%${posTypeName}%`,
},
);
qb.orWhere(
posLevelName != null && posLevelName != ""
? "registryEmployee.posLevelName LIKE :posLevelName"
: "1=1",
{
posLevelName: `%${posLevelName}%`,
},
);
qb.orWhere(
position != null && position != "" ? "registryEmployee.position LIKE :position" : "1=1",
{
position: `%${position}%`,
},
);
qb.orWhere(
gender != null && gender != "" ? "registryEmployee.gender LIKE :gender" : "1=1",
{
gender: `%${gender}%`,
},
);
qb.orWhere(
relationship != null && relationship != ""
? "registryEmployee.relationship LIKE :relationship"
: "1=1",
{
relationship: `%${relationship}%`,
},
);
qb.orWhere(
degree != null && degree != "" ? "registryEmployee.degree LIKE :degree" : "1=1",
{
degree: `%${degree}%`,
},
);
}),
posType != null && posType != ""
? "registryEmployee.posTypeName LIKE :posTypeName"
: "1=1",
{
posTypeName: `%${posType}%`,
}
)
.andWhere(
posLevel != null && posLevel != ""
? "registryEmployee.posLevelName LIKE :posLevelName"
: "1=1",
{
posLevelName: `%${posLevel}%`,
}
)
.andWhere(
position != null && position != ""
? "registryEmployee.position LIKE :position"
: "1=1",
{
position: `%${position}%`,
}
)
.andWhere(
gender != null && gender != ""
? "registryEmployee.gender LIKE :gender"
: "1=1",
{
gender: `%${gender}%`,
}
)
.andWhere(
status != null && status != ""
? "registryEmployee.relationship LIKE :relationship"
: "1=1",
{
relationship: `%${status}%`,
}
)
.andWhere(
education != null && education != ""
? "registryEmployee.degree LIKE :degree"
: "1=1",
{
degree: `%${education}%`,
}
)
.orderBy(`registryEmployee.${sortBy}`, sort)
.getManyAndCount();
@ -621,6 +662,8 @@ export class ReportController extends Controller {
gender: x.gender,
relationship: x.relationship,
dateAppoint: x.dateAppoint,
dateRetire: x.dateRetire,
dateRetireLaw: x.dateRetireLaw,
birthdate: x.birthdate,
degree: x.degree,
age: x.age,
@ -1583,8 +1626,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -1957,8 +2000,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -2339,8 +2382,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -2737,8 +2780,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -3139,8 +3182,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -3734,8 +3777,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.current_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -4108,8 +4151,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.current_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -4490,8 +4533,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.current_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -4888,8 +4931,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.current_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -5290,8 +5333,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.current_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -5841,8 +5884,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -6033,8 +6076,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -6233,8 +6276,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -6441,8 +6484,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];
@ -6656,8 +6699,8 @@ export class ReportController extends Controller {
) {
let _salary: any = posMaster.next_holder.profileSalary.sort(
(a, b) =>
(b.date == null ? 0 : b.date.getTime()) -
(a.date == null ? 0 : a.date.getTime()),
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
);
if (_salary.length > 0) {
salary = _salary[0];

View file

@ -830,18 +830,4 @@ export class KeycloakController extends Controller {
return result;
}
@Post("user/reset-password")
async forgetPassword(
@Request() request: { user: { sub: string; preferred_username: string } },
@Body()
body: {
username: string;
},
) {
const result = await resetPassword(body.username);
if (!result) {
throw new Error("Failed. Cannot change password.");
}
return result;
}
}

View file

@ -30,11 +30,11 @@ export class CommandType extends EntityBase {
@Column({
nullable: true,
comment: "รหัสประเภทของคำสั่งแต่งตั้ง",
comment: "รหัสประเภทของคำสั่ง",
length: 255,
default: null,
})
refCommandCode: string;
commandCode: string;
@Column({
nullable: true,

View file

@ -25,11 +25,61 @@ export class ProfileSalary extends EntityBase {
profileEmployeeId: string;
@Column({
comment: "วันที่",
nullable: true,
comment: "เรียงลำดับใหมาตามการนำเข้า",
default: null,
})
order: number;
@Column({
nullable: true,
comment: "เลขที่คำสั่ง",
default: null,
})
commandNo: number;
@Column({
nullable: true,
comment: "ปีที่ออกคำสั่ง",
default: null,
})
commandYear: number;
@Column({
comment: "คำสั่งวันที่",
type: "datetime",
nullable: true,
})
date: Date;
commandDateSign: Date;
@Column({
comment: "คำสั่งมีผลวันที่",
type: "datetime",
nullable: true,
})
commandDateAffect: Date;
@Column({
nullable: true,
comment: "รหัสประเภทของคำสั่ง",
default: null,
})
commandCode: string;
@Column({
nullable: true,
comment: "ชื่อประเภทคำสั่ง",
default: null,
})
commandName: string;
@Column({
nullable: true,
length: 40,
comment: "ตัวย่อเลขที่ตำแหน่ง",
default: null,
})
posNoAbb: string;
@Column({
nullable: true,
@ -45,31 +95,7 @@ export class ProfileSalary extends EntityBase {
comment: "ตำแหน่ง",
default: null,
})
position: string;
@Column({
nullable: true,
length: 255,
comment: "สายงาน",
default: null,
})
positionLine: string;
@Column({
nullable: true,
length: 255,
comment: "ด้าน/สาขา",
default: null,
})
positionPathSide: string;
@Column({
nullable: true,
length: 255,
comment: "ตำแหน่งทางการบริหาร",
default: null,
})
positionExecutive: string;
positionName: string;
@Column({
nullable: true,
@ -88,44 +114,11 @@ export class ProfileSalary extends EntityBase {
positionLevel: string;
@Column({
comment: "เงินเดือนฐาน",
default: 0,
nullable: true,
type: "double",
comment: "ระดับของเก่าที่ยังไม่เทียบเท่าแบบแท่ง",
default: null,
})
amount: Double;
@Column({
comment: "เงินพิเศษ",
default: 0,
nullable: true,
type: "double",
})
amountSpecial: Double;
@Column({
comment: "เงินประจำตำแหน่ง",
default: 0,
nullable: true,
type: "double",
})
positionSalaryAmount: Double;
@Column({
comment: "เงินค่าตอบแทนรายเดือน",
default: 0,
nullable: true,
type: "double",
})
mouthSalaryAmount: Double;
// @Column({
// nullable: true,
// comment: "ประเภทคำสั่ง",
// type: "text",
// default: null,
// })
// commandType: string;
positionCee: string;
@Column({
nullable: true,
@ -164,54 +157,51 @@ export class ProfileSalary extends EntityBase {
@Column({
nullable: true,
comment: "ระดับ",
length: 255,
comment: "ตำแหน่งทางการบริหาร",
default: null,
})
mpCee: string;
positionExecutive: string;
@Column({
comment: "เงินเดือนฐาน",
default: 0,
nullable: true,
type: "double",
})
amount: Double;
@Column({
comment: "เงินพิเศษ",
default: 0,
nullable: true,
type: "double",
})
amountSpecial: Double;
@Column({
comment: "เงินประจำตำแหน่ง",
default: 0,
nullable: true,
type: "double",
})
positionSalaryAmount: Double;
@Column({
comment: "เงินค่าตอบแทนรายเดือน",
default: 0,
nullable: true,
type: "double",
})
mouthSalaryAmount: Double;
@Column({
nullable: true,
comment: "รหัสประเภทของคำสั่งแต่งตั้ง",
length: 255,
comment: "หมายเหตุ",
default: null,
})
refCommandCode: string;
@Column({
nullable: true,
comment: "ชื่อประเภทคำสั่ง",
default: null,
})
refCommandName: string;
@Column({
nullable: true,
comment: "เลขที่คำสั่ง",
type: "text",
default: null,
})
refCommandNo: string;
@Column({
comment: "วันที่ออกคำสั่ง",
type: "datetime",
nullable: true,
})
refCommandDate: Date;
@Column({
nullable: true,
comment: "เอกสารอ้างอิง",
type: "text",
default: null,
})
templateDoc: string;
@Column({
nullable: true,
comment: "ลำดับตำแหน่ง",
default: null,
})
order: number;
remark: string;
@Column({
comment: "วันที่",
@ -253,110 +243,107 @@ export class ProfileSalary extends EntityBase {
export class CreateProfileSalary {
profileId: string;
date?: Date | null;
commandDateAffect?: Date | null;
commandDateSign?: Date | null;
amount?: Double | null;
amountSpecial?: Double | null;
positionSalaryAmount?: Double | null;
mouthSalaryAmount?: Double | null;
posNo: string | null;
position: string | null;
positionLine: string | null;
positionPathSide: string | null;
posNoAbb: string | null;
positionName: string | null;
positionExecutive: string | null;
positionType: string | null;
positionLevel: string | null;
refCommandNo: string | null;
commandId?: string | null;
// commandType?: string | null;
templateDoc: string | null;
remark: string | null;
isGovernment?: boolean | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
commandNo?: number | null;
commandYear?: number | null;
}
export class CreateProfileSalaryEmployee {
profileEmployeeId: string | null;
date?: Date | null;
commandDateAffect?: Date | null;
commandDateSign?: Date | null;
amount?: Double | null;
amountSpecial?: Double | null;
commandId?: string | null;
positionSalaryAmount?: Double | null;
mouthSalaryAmount?: Double | null;
posNo: string | null;
position: string | null;
// positionLine: string | null;
// positionPathSide: string | null;
// positionExecutive: string | null;
posNoAbb: string | null;
positionName: string | null;
positionType: string | null;
positionLevel: string | null;
refCommandNo: string | null;
templateDoc: string | null;
remark: string | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
commandNo?: number | null;
commandYear?: number | null;
}
export class UpdateProfileSalaryEmployee {
date?: Date | null;
commandDateAffect?: Date | null;
commandDateSign?: Date | null;
amount?: Double | null;
amountSpecial?: Double | null;
positionSalaryAmount?: Double | null;
mouthSalaryAmount?: Double | null;
posNo: string | null;
position: string | null;
// positionLine: string | null;
// positionPathSide: string | null;
// positionExecutive: string | null;
posNoAbb: string | null;
positionName: string | null;
positionType: string | null;
positionLevel: string | null;
refCommandNo: string | null;
templateDoc: string | null;
remark: string | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
commandNo?: number | null;
commandYear?: number | null;
}
export type UpdateProfileSalary = {
date?: Date | null;
commandDateAffect?: Date | null;
commandDateSign?: Date | null;
amount?: Double | null;
amountSpecial?: Double | null;
positionSalaryAmount?: Double | null;
mouthSalaryAmount?: Double | null;
posNo?: string | null;
position?: string | null;
positionLine?: string | null;
positionPathSide?: string | null;
posNoAbb: string | null;
positionName: string | null;
positionExecutive?: string | null;
positionType?: string | null;
positionLevel?: string | null;
refCommandNo?: string | null;
templateDoc?: string | null;
remark?: string | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
commandNo?: number | null;
commandYear?: number | null;
};

View file

@ -5,19 +5,62 @@ import { Command } from "./Command";
@Entity("profileSalaryHistory")
export class ProfileSalaryHistory extends EntityBase {
// @Column({
// length: 40,
// comment: "คีย์นอก(FK)ของตาราง profile",
// type: "uuid",
// })
// profileId: string;
@Column({
nullable: true,
comment: "เรียงลำดับใหมาตามการนำเข้า",
default: null,
})
order: number;
@Column({
comment: "วันที่",
nullable: true,
comment: "เลขที่คำสั่ง",
default: null,
})
commandNo: number;
@Column({
nullable: true,
comment: "ปีที่ออกคำสั่ง",
default: null,
})
commandYear: number;
@Column({
comment: "คำสั่งวันที่",
type: "datetime",
nullable: true,
})
date: Date;
commandDateSign: Date;
@Column({
comment: "คำสั่งมีผลวันที่",
type: "datetime",
nullable: true,
})
commandDateAffect: Date;
@Column({
nullable: true,
comment: "รหัสประเภทของคำสั่ง",
default: null,
})
commandCode: string;
@Column({
nullable: true,
comment: "ชื่อประเภทคำสั่ง",
default: null,
})
commandName: string;
@Column({
nullable: true,
length: 40,
comment: "ตัวย่อเลขที่ตำแหน่ง",
default: null,
})
posNoAbb: string;
@Column({
nullable: true,
@ -33,31 +76,7 @@ export class ProfileSalaryHistory extends EntityBase {
comment: "ตำแหน่ง",
default: null,
})
position: string;
@Column({
nullable: true,
length: 255,
comment: "สายงาน",
default: null,
})
positionLine: string;
@Column({
nullable: true,
length: 255,
comment: "ด้าน/สาขา",
default: null,
})
positionPathSide: string;
@Column({
nullable: true,
length: 255,
comment: "ตำแหน่งทางการบริหาร",
default: null,
})
positionExecutive: string;
positionName: string;
@Column({
nullable: true,
@ -76,44 +95,11 @@ export class ProfileSalaryHistory extends EntityBase {
positionLevel: string;
@Column({
comment: "เงินเดือนฐาน",
default: 0,
nullable: true,
type: "double",
comment: "ระดับของเก่าที่ยังไม่เทียบเท่าแบบแท่ง",
default: null,
})
amount: Double;
@Column({
comment: "เงินพิเศษ",
default: 0,
nullable: true,
type: "double",
})
amountSpecial: Double;
@Column({
comment: "เงินประจำตำแหน่ง",
default: 0,
nullable: true,
type: "double",
})
positionSalaryAmount: Double;
@Column({
comment: "เงินค่าตอบแทนรายเดือน",
default: 0,
nullable: true,
type: "double",
})
mouthSalaryAmount: Double;
// @Column({
// nullable: true,
// comment: "ประเภทคำสั่ง",
// type: "text",
// default: null,
// })
// commandType: string;
positionCee: string;
@Column({
nullable: true,
@ -152,47 +138,65 @@ export class ProfileSalaryHistory extends EntityBase {
@Column({
nullable: true,
comment: "ระดับ",
length: 255,
comment: "ตำแหน่งทางการบริหาร",
default: null,
})
mpCee: string;
positionExecutive: string;
@Column({
comment: "เงินเดือนฐาน",
default: 0,
nullable: true,
type: "double",
})
amount: Double;
@Column({
comment: "เงินพิเศษ",
default: 0,
nullable: true,
type: "double",
})
amountSpecial: Double;
@Column({
comment: "เงินประจำตำแหน่ง",
default: 0,
nullable: true,
type: "double",
})
positionSalaryAmount: Double;
@Column({
comment: "เงินค่าตอบแทนรายเดือน",
default: 0,
nullable: true,
type: "double",
})
mouthSalaryAmount: Double;
@Column({
nullable: true,
comment: "รหัสประเภทของคำสั่งแต่งตั้ง",
length: 255,
comment: "หมายเหตุ",
default: null,
})
refCommandCode: string;
remark: string;
@Column({
nullable: true,
comment: "ชื่อประเภทคำสั่ง",
default: null,
})
refCommandName: string;
@Column({
nullable: true,
comment: "เลขที่คำสั่ง",
type: "text",
default: null,
})
refCommandNo: string;
@Column({
comment: "วันที่ออกคำสั่ง",
comment: "วันที่",
type: "datetime",
nullable: true,
})
refCommandDate: Date;
dateGovernment: Date;
@Column({
nullable: true,
comment: "เอกสารอ้างอิง",
type: "text",
comment: "เข้ารับราชการ",
default: null,
})
templateDoc: string;
isGovernment: boolean;
@Column({
length: 40,
@ -200,13 +204,6 @@ export class ProfileSalaryHistory extends EntityBase {
})
profileSalaryId: string;
@Column({
nullable: true,
comment: "ลำดับตำแหน่ง",
default: null,
})
order: number;
@Column({
nullable: true,
length: 40,
@ -239,16 +236,16 @@ export class CreateProfileSalaryHistory {
positionType: string | null;
positionLevel: string | null;
refCommandNo: string | null;
templateDoc: string | null;
remark: string | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
}
export class UpdateProfileSalaryHistory {
@ -265,14 +262,14 @@ export class UpdateProfileSalaryHistory {
positionType?: string | null;
positionLevel?: string | null;
refCommandNo?: string | null;
templateDoc?: string | null;
remark?: string | null;
orgRoot?: string | null;
orgChild1?: string | null;
orgChild2?: string | null;
orgChild3?: string | null;
orgChild4?: string | null;
mpCee?: string | null;
refCommandCode?: string | null;
refCommandName?: string | null;
positionCee?: string | null;
commandCode?: string | null;
commandName?: string | null;
}

View file

@ -1,13 +1,7 @@
import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";
@Entity("HR_POSITION_OFFICER")
export class HR_POSITION_OFFICER {
@Column({
nullable: true,
type: "text",
default: null,
})
CIT: string;
@Entity("positionOfficer")
export class positionOfficer {
@PrimaryGeneratedColumn()
id!: number;
@ -16,173 +10,175 @@ export class HR_POSITION_OFFICER {
type: "text",
default: null,
})
FLAG_PERSON_TYPE: string;
citizenId: string;
@Column({
nullable: true,
type: "text",
default: null,
})
MP_POS_DATE: string;
flag_person_type: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SALARY: string;
order_move_position: number;
@Column({
nullable: true,
type: "text",
default: null,
})
MP_COMMAND_NUM: string;
pos_num_code_sit: string;
@Column({
nullable: true,
type: "text",
default: null,
})
POS_NUM_NAME: string;
pos_num_code_sit_abb: string;
@Column({
nullable: true,
default: null,
})
mp_command_num: number;
@Column({
nullable: true,
default: null,
})
cur_year: number;
@Column({
nullable: true,
default: null,
})
mp_command_date: Date;
@Column({
nullable: true,
default: null,
})
mp_pos_date: Date;
@Column({
nullable: true,
type: "text",
default: null,
})
POS_NUM_CODE: string;
flag_to_name_code: string;
@Column({
nullable: true,
type: "text",
default: null,
})
FLAG_TO_NAME: string;
flag_to_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
WORK_LINE_NAME: string;
pos_num_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SPECIALIST_NAME: string;
pos_num_code: string;
@Column({
nullable: true,
type: "text",
default: null,
})
ADMIN_NAME: string;
work_line_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
REMARK: string;
mp_cee: string;
@Column({
nullable: true,
type: "text",
default: null,
})
ORDER_MOVE_POSITION: string;
job_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
MP_COMMAND_DATE: string;
section_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
FLAG_TO_NAME_CODE: string;
division_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
JOB_NAME: string;
department_code: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SECTION_NAME: string;
department_name: string;
@Column({
nullable: true,
type: "text",
default: null,
})
DIVISION_NAME: string;
admin_name: string;
@Column({
nullable: true,
default: null,
})
salary: number;
@Column({
nullable: true,
type: "text",
default: null,
})
DEPARTMENT_NAME: string;
remark: string;
@Column({
nullable: true,
type: "text",
default: null,
})
DEPARTMENT_CODE: string;
sal_pos_amount_1: string;
@Column({
nullable: true,
type: "text",
default: null,
})
MP_CEE: string;
sal_pos_amount_2: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SAL_POS_AMOUNT_1: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SAL_POS_AMOUNT_2: string;
@Column({
nullable: true,
type: "text",
default: null,
})
SPECIAL_AMT: string;
@Column({
nullable: true,
type: "text",
default: null,
})
USER_CREATE: string;
@Column({
nullable: true,
type: "text",
default: null,
})
USER_UPDATE: string;
special_amt: string;
}

View file

@ -47,7 +47,7 @@ import { ViewColumn, ViewEntity } from "typeorm";
ed.degree,
ed.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
@ -85,10 +85,12 @@ import { ViewColumn, ViewEntity } from "typeorm";
pm.searchShortName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName",
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
@ -183,6 +185,12 @@ export class viewRegistryEmployee {
@ViewColumn()
dateAppoint: Date;
@ViewColumn()
dateRetire: Date;
@ViewColumn()
dateRetireLaw: Date;
@ViewColumn()
birthdate: Date;

View file

@ -51,7 +51,7 @@ import { ViewColumn, ViewEntity } from "typeorm";
ed.degree,
ed.profileId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
@ -93,6 +93,8 @@ import { ViewColumn, ViewEntity } from "typeorm";
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
@ -191,6 +193,12 @@ export class viewRegistryOfficer {
@ViewColumn()
dateAppoint: Date;
@ViewColumn()
dateRetire: Date;
@ViewColumn()
dateRetireLaw: Date;
@ViewColumn()
birthdate: Date;

View file

@ -34,7 +34,6 @@ class FunctionMain {
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
refCommandDate: new Date(),
createdAt: new Date(),
lastUpdatedAt: new Date(),
};

View file

@ -51,7 +51,7 @@ export async function calculateGovAge(profileId: string, type: string) {
where: {
[isEmployee ? "profileEmployeeId" : "profileId"]: profileId,
},
select: ["date", "dateGovernment", "isGovernment"],
select: ["commandDateAffect", "dateGovernment", "isGovernment"],
order: { order: "ASC" },
});

View file

@ -4,6 +4,8 @@ const KC_URL = process.env.KC_URL;
const KC_REALMS = process.env.KC_REALMS;
const KC_CLIENT_ID = process.env.KC_SERVICE_ACCOUNT_CLIENT_ID;
const KC_SECRET = process.env.KC_SERVICE_ACCOUNT_SECRET;
const AUTH_ACCOUNT_SECRET = process.env.AUTH_ACCOUNT_SECRET
const API_KEY = process.env.API_KEY
let token: string | null = null;
let decoded: DecodedJwt | null = null;
@ -765,9 +767,31 @@ export async function changeUserPassword(userId: string, newPassword: string) {
// Function to reset password
export async function resetPassword(username: string) {
try {
// if (!API_KEY || !AUTH_ACCOUNT_SECRET) {
// throw new Error("KC_CLIENT_ID and KC_SECRET are required to used this feature.");
// }
// const body = new URLSearchParams();
// body.append("client_id", "gettoken");
// body.append("client_secret", AUTH_ACCOUNT_SECRET?.toString());
// body.append("grant_type", "client_credentials");
// const tokenResponse = await fetch(`${process.env.KC_URL}/realms/${process.env.KC_REALMS}/protocol/openid-connect/token`, {
// method: "POST",
// headers: {
// "Content-Type": "application/x-www-form-urlencoded",
// api_key: API_KEY,
// },
// body: body
// });
// if (!tokenResponse.ok) {
// throw new Error("Failed to get admin token");
// }
// const tokenData = await tokenResponse.json();
// const adminToken = tokenData.access_token;
const users = await fetch(`${KC_URL}/admin/realms/${KC_REALMS}/users?email=${encodeURIComponent(username)}`, {
headers: {
"authorization": `Bearer ${await getToken()}`,
// "authorization": `Bearer ${adminToken}`,
"content-type": `application/json`,
},
});
@ -780,6 +804,7 @@ export async function resetPassword(username: string) {
method: "PUT",
headers: {
"Authorization": `Bearer ${await getToken()}`,
// "Authorization": `Bearer ${adminToken}`,
"Content-Type": "application/json"
},
body: JSON.stringify(["UPDATE_PASSWORD"])

View file

@ -0,0 +1,108 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Updateprofilesalaryaddmis1740139573883 implements MigrationInterface {
name = 'Updateprofilesalaryaddmis1740139573883'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`commandType\` CHANGE \`refCommandCode\` \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่งแต่งตั้ง'`);
await queryRunner.query(`CREATE TABLE \`positionOfficer\` (\`id\` int NOT NULL AUTO_INCREMENT, \`citizenId\` text NULL, \`flag_person_type\` text NULL, \`order_move_position\` text NULL, \`pos_num_code_sit\` text NULL, \`pos_num_code_sit_abb\` text NULL, \`mp_command_num\` int NULL, \`cur_year\` int NULL, \`mp_command_date\` datetime NULL, \`mp_pos_date\` datetime NULL, \`flag_to_name_code\` text NULL, \`flag_to_name\` text NULL, \`pos_num_name\` text NULL, \`pos_num_code\` text NULL, \`work_line_name\` text NULL, \`mp_cee\` text NULL, \`job_name\` text NULL, \`section_name\` text NULL, \`division_name\` text NULL, \`department_code\` text NULL, \`department_name\` text NULL, \`admin_name\` text NULL, \`salary\` int NULL, \`remark\` text NULL, \`sal_pos_amount_1\` text NULL, \`sal_pos_amount_2\` text NULL, \`special_amt\` text NULL, PRIMARY KEY (\`id\`)) ENGINE=InnoDB`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`date\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`mpCee\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`position\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`positionLine\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`positionPathSide\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`refCommandCode\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`refCommandDate\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`refCommandName\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`refCommandNo\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`templateDoc\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`date\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`mpCee\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`position\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`positionLine\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`positionPathSide\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`refCommandCode\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`refCommandDate\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`refCommandName\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`refCommandNo\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`templateDoc\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandNo\` int NULL COMMENT 'เลขที่คำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandYear\` int NULL COMMENT 'ปีที่ออกคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandDateSign\` datetime NULL COMMENT 'คำสั่งวันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandDateAffect\` datetime NULL COMMENT 'คำสั่งมีผลวันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`commandName\` varchar(255) NULL COMMENT 'ชื่อประเภทคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`posNoAbb\` varchar(40) NULL COMMENT 'ตัวย่อเลขที่ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`positionName\` varchar(255) NULL COMMENT 'ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`positionCee\` varchar(255) NULL COMMENT 'ระดับของเก่าที่ยังไม่เทียบเท่าแบบแท่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`remark\` varchar(255) NULL COMMENT 'หมายเหตุ'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`dateGovernment\` datetime NULL COMMENT 'วันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`isGovernment\` tinyint NULL COMMENT 'เข้ารับราชการ'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandNo\` int NULL COMMENT 'เลขที่คำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandYear\` int NULL COMMENT 'ปีที่ออกคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandDateSign\` datetime NULL COMMENT 'คำสั่งวันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandDateAffect\` datetime NULL COMMENT 'คำสั่งมีผลวันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`commandName\` varchar(255) NULL COMMENT 'ชื่อประเภทคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`posNoAbb\` varchar(40) NULL COMMENT 'ตัวย่อเลขที่ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`positionName\` varchar(255) NULL COMMENT 'ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`positionCee\` varchar(255) NULL COMMENT 'ระดับของเก่าที่ยังไม่เทียบเท่าแบบแท่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`remark\` varchar(255) NULL COMMENT 'หมายเหตุ'`);
await queryRunner.query(`ALTER TABLE \`commandType\` DROP COLUMN \`commandCode\``);
await queryRunner.query(`ALTER TABLE \`commandType\` ADD \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` CHANGE \`order\` \`order\` int NULL COMMENT 'เรียงลำดับใหมาตามการนำเข้า'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` CHANGE \`order\` \`order\` int NULL COMMENT 'เรียงลำดับใหมาตามการนำเข้า'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`profileSalary\` CHANGE \`order\` \`order\` int NULL COMMENT 'ลำดับตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` CHANGE \`order\` \`order\` int NULL COMMENT 'ลำดับตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`commandType\` DROP COLUMN \`commandCode\``);
await queryRunner.query(`ALTER TABLE \`commandType\` ADD \`commandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่งแต่งตั้ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`remark\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`positionCee\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`positionName\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`posNoAbb\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandName\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandCode\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandDateAffect\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandDateSign\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandYear\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` DROP COLUMN \`commandNo\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`isGovernment\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`dateGovernment\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`remark\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`positionCee\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`positionName\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`posNoAbb\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandName\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandCode\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandDateAffect\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandDateSign\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandYear\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP COLUMN \`commandNo\``);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`templateDoc\` text NULL COMMENT 'เอกสารอ้างอิง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`refCommandNo\` text NULL COMMENT 'เลขที่คำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`refCommandName\` varchar(255) NULL COMMENT 'ชื่อประเภทคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`refCommandDate\` datetime NULL COMMENT 'วันที่ออกคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`refCommandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่งแต่งตั้ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`positionPathSide\` varchar(255) NULL COMMENT 'ด้าน/สาขา'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`positionLine\` varchar(255) NULL COMMENT 'สายงาน'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`position\` varchar(255) NULL COMMENT 'ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`mpCee\` varchar(255) NULL COMMENT 'ระดับ'`);
await queryRunner.query(`ALTER TABLE \`profileSalary\` ADD \`date\` datetime NULL COMMENT 'วันที่'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`templateDoc\` text NULL COMMENT 'เอกสารอ้างอิง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`refCommandNo\` text NULL COMMENT 'เลขที่คำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`refCommandName\` varchar(255) NULL COMMENT 'ชื่อประเภทคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`refCommandDate\` datetime NULL COMMENT 'วันที่ออกคำสั่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`refCommandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่งแต่งตั้ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`positionPathSide\` varchar(255) NULL COMMENT 'ด้าน/สาขา'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`positionLine\` varchar(255) NULL COMMENT 'สายงาน'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`position\` varchar(255) NULL COMMENT 'ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`mpCee\` varchar(255) NULL COMMENT 'ระดับ'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD \`date\` datetime NULL COMMENT 'วันที่'`);
await queryRunner.query(`DROP TABLE \`positionOfficer\``);
await queryRunner.query(`ALTER TABLE \`commandType\` CHANGE \`commandCode\` \`refCommandCode\` varchar(255) NULL COMMENT 'รหัสประเภทของคำสั่งแต่งตั้ง'`);
}
}

View file

@ -0,0 +1,246 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Update22420251740366319309 implements MigrationInterface {
name = 'Update22420251740366319309'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`idOFFICER\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP PRIMARY KEY`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ID\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_PERSON_TYPE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RANK_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TYPE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_YEAR\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETURN_OCCUPY_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FORCE_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UPCLASS_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FUND_COURSE_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`EDUCATION_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MAJOR_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MAJOR_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UNIVER_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POSITION_CATG\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_2\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIALIST_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIALIST_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_ABB_NAME_1\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SAL_POS_AMOUNT_1\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`ADMIN_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_ADD\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_PERCENT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_AMT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`PAYMENT_AMT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`PAYMENT_PERCENT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_1\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`COST_LIVING_AMOUNT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DEPARTMENT_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DIVISION_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SECTION_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`JOB_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_CUR_ST\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_NUM\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_POS_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_YEAR\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RET_BORN_MP_YEAR\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_POS_CODE_1\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CUR_YEAR\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_ABB\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CONTENT_NO\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_ABB_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`POS_NUM_CODE_SIT_CODE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_NUM_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CUR_YEAR_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_YEAR_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_CODE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_TO_NAME_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_COMMAND_DATE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_POS_DATE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_FLAG_1_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_CODE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SPECIAL_AMT_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_ADD_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MP_CEE_CODE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SALARY_LEVEL_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`GROUPWORK_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_CODE_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`WORK_LINE_NAME_O\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`FLAG_RETIRE_STATUS\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`MARRIAGE_STATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`SUN_NO\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETIRE_TYPE_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`RETIRE_POS_NO\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`DEXPIRE_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`HELP_LIVING_AMOUNT\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_DEPARTMENT_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_DIVISION_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_SECTION_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`OLD_RETIRE_JOB_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`CREATE_DATE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`UPDATE_DATE\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`STREET\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`TEL\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`CONTACT_STREET\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` DROP COLUMN \`CONTACT_TEL\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`FATHER_RANK_CODE\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`MOTHER_RANK_CODE\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`SPOUSE_RANK_CODE\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`LIFE_SPOUSE\``);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` DROP COLUMN \`SUN_NO\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`FLAG_EDUCATION\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`MAJOR_CODE\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`MINOR_CODE\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`FUND_COURSE_CODE\``);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`id\` int NOT NULL PRIMARY KEY AUTO_INCREMENT`);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`id\``);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`id\` int NOT NULL PRIMARY KEY AUTO_INCREMENT`);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`order_move_position\``);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`order_move_position\` text NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`EDUCATION_SEQ\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`EDUCATION_SEQ\` varchar(255) NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`EDUCATION_SEQ\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`EDUCATION_SEQ\` varchar(255) NULL`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` DROP COLUMN \`EDUCATION_SEQ\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`EDUCATION_SEQ\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` DROP COLUMN \`EDUCATION_SEQ\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION\` ADD \`EDUCATION_SEQ\` text NULL`);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`order_move_position\``);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`order_move_position\` int NULL`);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` DROP COLUMN \`id\``);
await queryRunner.query(`ALTER TABLE \`positionOfficer\` ADD \`id\` int NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` DROP COLUMN \`id\``);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`FUND_COURSE_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`MINOR_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`MAJOR_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_EDUCATION_EMP\` ADD \`FLAG_EDUCATION\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`SUN_NO\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`LIFE_SPOUSE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`SPOUSE_RANK_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`MOTHER_RANK_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_FAMILY\` ADD \`FATHER_RANK_CODE\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`CONTACT_TEL\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`CONTACT_STREET\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`TEL\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`HR_PERSONAL_EMP_ADDRESS\` ADD \`STREET\` mediumtext NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UPDATE_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CREATE_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_JOB_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_SECTION_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_DIVISION_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`OLD_RETIRE_DEPARTMENT_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`HELP_LIVING_AMOUNT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DEXPIRE_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETIRE_POS_NO\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETIRE_TYPE_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SUN_NO\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MARRIAGE_STATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_RETIRE_STATUS\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_NAME_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_CODE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`GROUPWORK_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_CODE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_ADD_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_AMT_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_CODE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_1_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_POS_DATE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_DATE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_CODE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_YEAR_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CUR_YEAR_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_NUM_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_ABB_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_O\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CONTENT_NO\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT_ABB\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`CUR_YEAR\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_CODE_1\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_MP_YEAR\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_YEAR\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_POS_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TO_NAME_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_COMMAND_NUM\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POS_NUM_CODE_SIT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_CUR_ST\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`JOB_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SECTION_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DIVISION_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`DEPARTMENT_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`COST_LIVING_AMOUNT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG_1\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`PAYMENT_PERCENT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`PAYMENT_AMT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_AMT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIAL_PERCENT\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_ADD\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FLAG\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SAL_POS_AMOUNT_1\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_ABB_NAME_1\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIALIST_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SPECIALIST_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SAL_POS_AMOUNT_2\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_POS_ABB_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`SALARY_LEVEL_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ADMIN_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_CEE_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`POSITION_CATG\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UNIVER_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MAJOR_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MAJOR_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`EDUCATION_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FUND_COURSE_NAME\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`WORK_LINE_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`UPCLASS_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`MP_FORCE_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RETURN_OCCUPY_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_YEAR\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RET_BORN_DATE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_TYPE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`RANK_CODE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`FLAG_PERSON_TYPE\` text NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`ID\` varchar(13) NOT NULL`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD PRIMARY KEY (\`ID\`)`);
await queryRunner.query(`ALTER TABLE \`OFFICER\` ADD \`idOFFICER\` int NULL`);
}
}

View file

@ -0,0 +1,424 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateViewRegistryOfficerAndEmployee1740373723906 implements MigrationInterface {
name = 'UpdateViewRegistryOfficerAndEmployee1740373723906'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_employee\``);
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_officer\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP FOREIGN KEY \`FK_f1ded3e1f83ab2437f739a14f38\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD CONSTRAINT \`FK_f1ded3e1f83ab2437f739a14f38\` FOREIGN KEY (\`profileSalaryId\`) REFERENCES \`profileSalary\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`);
await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS
WITH Position AS (
SELECT
posExecutive.posExecutiveName,
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM position pn
LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
pn.posExecutiveName,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM posMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE
orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
pm.posExecutiveName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profile p
LEFT JOIN posLevel ON p.posLevelId = posLevel.id
LEFT JOIN posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1
`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]);
await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS
WITH Position AS (
SELECT
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM employeePosition pn
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM employeePosMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileEmployeeId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
p.employeeClass,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profileEmployee p
LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id
LEFT JOIN employeePosType posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1
`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_employee\``);
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_officer\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP FOREIGN KEY \`FK_f1ded3e1f83ab2437f739a14f38\``);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD CONSTRAINT \`FK_f1ded3e1f83ab2437f739a14f38\` FOREIGN KEY (\`profileSalaryId\`) REFERENCES \`profileSalary\`(\`id\`) ON DELETE RESTRICT ON UPDATE RESTRICT`);
await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS WITH Position AS (
SELECT
posExecutive.posExecutiveName,
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM position pn
LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
pn.posExecutiveName,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM posMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE
orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
pm.posExecutiveName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profile p
LEFT JOIN posLevel ON p.posLevelId = posLevel.id
LEFT JOIN posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]);
await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS WITH Position AS (
SELECT
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM employeePosition pn
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM employeePosMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileEmployeeId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
p.employeeClass,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profileEmployee p
LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id
LEFT JOIN employeePosType posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]);
}
}

View file

@ -0,0 +1,424 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateViewRegistryEmployee1740382878673 implements MigrationInterface {
name = 'UpdateViewRegistryEmployee1740382878673'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_employee\``);
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_officer\``);
await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS
WITH Position AS (
SELECT
posExecutive.posExecutiveName,
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM position pn
LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
pn.posExecutiveName,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM posMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE
orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
pm.posExecutiveName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profile p
LEFT JOIN posLevel ON p.posLevelId = posLevel.id
LEFT JOIN posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1
`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level ASC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]);
await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS
WITH Position AS (
SELECT
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM employeePosition pn
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM employeePosMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileEmployeeId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
p.employeeClass,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
p.position,
posType.posTypeName,
CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName",
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profileEmployee p
LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id
LEFT JOIN employeePosType posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1
`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level ASC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS \"posLevelName\",\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_employee","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_employee\``);
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_registry_officer","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_registry_officer\``);
await queryRunner.query(`CREATE VIEW \`view_registry_officer\` AS WITH Position AS (
SELECT
posExecutive.posExecutiveName,
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM position pn
LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
pn.posExecutiveName,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM posMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE
orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
pm.posExecutiveName,
p.position,
posType.posTypeName,
posLevel.posLevelName,
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profile p
LEFT JOIN posLevel ON p.posLevelId = posLevel.id
LEFT JOIN posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_officer","WITH Position AS (\n SELECT \n posExecutive.posExecutiveName,\n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM position pn\n LEFT JOIN posExecutive ON pn.posExecutiveId = posExecutive.id\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n pn.posExecutiveName,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM posMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE \n orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n pm.posExecutiveName,\n p.position,\n posType.posTypeName,\n posLevel.posLevelName,\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profile p\n LEFT JOIN posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1"]);
await queryRunner.query(`CREATE VIEW \`view_registry_employee\` AS WITH Position AS (
SELECT
pn.posMasterId,
ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number
FROM employeePosition pn
WHERE pn.positionIsSelected IS TRUE
),
PosMaster AS (
SELECT
pm.current_holderId,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
orgRoot.orgRootName,
orgChild1.orgChild1Name,
orgChild2.orgChild2Name,
orgChild3.orgChild3Name,
orgChild4.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)
WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)
ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)
END AS searchShortName,
ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number
FROM employeePosMaster pm
LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId
LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId
LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id
LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id
LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id
LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id
LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1
WHERE orgRevision.orgRevisionIsCurrent IS TRUE
AND orgRevision.orgRevisionIsDraft IS FALSE
),
Education AS (
SELECT
ed.degree,
ed.profileEmployeeId,
ed.level,
ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number
FROM profileEducation ed
WHERE ed.isUse IS TRUE
ORDER BY ed.level ASC
)
SELECT
p.id as profileEmployeeId,
p.citizenId,
p.rank,
p.prefix,
p.firstName,
p.lastName,
p.isProbation,
p.isLeave,
p.isRetirement,
p.leaveType,
p.employeeClass,
pm.posMasterNo,
pm.orgRootId,
pm.orgChild1Id,
pm.orgChild2Id,
pm.orgChild3Id,
pm.orgChild4Id,
pm.orgRootName,
pm.orgChild1Name,
pm.orgChild2Name,
pm.orgChild3Name,
pm.orgChild4Name,
CASE
WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName
WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
ELSE CONCAT(pm.orgChild4Name, " ", pm.orgChild3Name, " ", pm.orgChild2Name, " ", pm.orgChild1Name, " ", pm.orgRootName)
END AS org,
pm.searchShortName,
p.position,
posType.posTypeName,
CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS "posLevelName",
p.gender,
p.relationship,
p.dateAppoint,
p.dateRetire,
p.dateRetireLaw,
p.birthdate,
ed.degree,
TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age
FROM profileEmployee p
LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id
LEFT JOIN employeePosType posType ON p.posTypeId = posType.id
LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1
LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_registry_employee","WITH Position AS (\n SELECT \n pn.posMasterId,\n ROW_NUMBER() OVER (PARTITION BY pn.posMasterId) AS pn_number\n FROM employeePosition pn\n WHERE pn.positionIsSelected IS TRUE\n ),\n PosMaster AS (\n SELECT \n pm.current_holderId,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n orgRoot.orgRootName,\n orgChild1.orgChild1Name,\n orgChild2.orgChild2Name,\n orgChild3.orgChild3Name,\n orgChild4.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN CONCAT(orgRoot.orgRootShortName, pm.posMasterNo)\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(orgChild1.orgChild1ShortName, pm.posMasterNo)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(orgChild2.orgChild2ShortName, pm.posMasterNo)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(orgChild3.orgChild3ShortName, pm.posMasterNo)\n ELSE CONCAT(orgChild4.orgChild4ShortName, pm.posMasterNo)\n END AS searchShortName,\n ROW_NUMBER() OVER (PARTITION BY pm.current_holderId ORDER BY pm.posMasterNo DESC) AS pm_number\n FROM employeePosMaster pm\n LEFT JOIN orgRevision ON orgRevision.id = pm.orgRevisionId\n LEFT JOIN orgRoot ON orgRoot.id = pm.orgRootId\n LEFT JOIN orgChild1 ON orgChild1.id = pm.orgChild1Id\n LEFT JOIN orgChild2 ON orgChild2.id = pm.orgChild2Id\n LEFT JOIN orgChild3 ON orgChild3.id = pm.orgChild3Id\n LEFT JOIN orgChild4 ON orgChild4.id = pm.orgChild4Id\n LEFT JOIN Position pn ON pm.id = pn.posMasterId AND pn.pn_number = 1\n WHERE orgRevision.orgRevisionIsCurrent IS TRUE \n AND orgRevision.orgRevisionIsDraft IS FALSE\n ),\n Education AS (\n SELECT \n ed.degree,\n ed.profileEmployeeId,\n ed.level,\n ROW_NUMBER() OVER (PARTITION BY ed.profileEmployeeId ORDER BY ed.level DESC) AS ed_number\n FROM profileEducation ed\n WHERE ed.isUse IS TRUE\n ORDER BY ed.level ASC\n )\n SELECT \n p.id as profileEmployeeId,\n p.citizenId,\n p.rank,\n p.prefix,\n p.firstName,\n p.lastName,\n p.isProbation,\n p.isLeave,\n p.isRetirement,\n p.leaveType,\n p.employeeClass,\n pm.posMasterNo,\n pm.orgRootId,\n pm.orgChild1Id,\n pm.orgChild2Id,\n pm.orgChild3Id,\n pm.orgChild4Id,\n pm.orgRootName,\n pm.orgChild1Name,\n pm.orgChild2Name,\n pm.orgChild3Name,\n pm.orgChild4Name,\n CASE \n WHEN pm.orgChild1Id IS NULL THEN pm.orgRootName\n WHEN pm.orgChild2Id IS NULL THEN CONCAT(pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild3Id IS NULL THEN CONCAT(pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n WHEN pm.orgChild4Id IS NULL THEN CONCAT(pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n ELSE CONCAT(pm.orgChild4Name, \" \", pm.orgChild3Name, \" \", pm.orgChild2Name, \" \", pm.orgChild1Name, \" \", pm.orgRootName)\n END AS org,\n pm.searchShortName,\n p.position,\n posType.posTypeName,\n CONCAT(posType.posTypeShortName, ' ', posLevel.posLevelName) AS \"posLevelName\",\n p.gender,\n p.relationship,\n p.dateAppoint,\n p.dateRetire,\n p.dateRetireLaw,\n p.birthdate,\n ed.degree,\n TIMESTAMPDIFF(YEAR, p.birthdate, CURDATE()) AS age\n FROM profileEmployee p\n LEFT JOIN employeePosLevel posLevel ON p.posLevelId = posLevel.id\n LEFT JOIN employeePosType posType ON p.posTypeId = posType.id\n LEFT JOIN PosMaster pm ON p.id = pm.current_holderId AND pm.pm_number = 1\n LEFT JOIN Education ed ON p.id = ed.profileEmployeeId AND ed.ed_number = 1"]);
}
}

View file

@ -42,7 +42,7 @@ export async function init() {
console.log("[AMQ] Listening for message...");
createConsumer(queue, channel, handler), //----> (3) Process Consumer
createConsumer(queue_org, channel, handler_org);
createConsumer(queue_org, channel, handler_org);
// createConsumer(queue2, channel, handler2);
}
@ -93,17 +93,18 @@ async function handler(msg: amqp.ConsumeMessage): Promise<boolean> {
.filter((x) => x.refId != null)
.map((x) => ({
refId: x.refId,
commandAffectDate: command.commandAffectDate,
commandNo: command.commandNo,
commandYear: command.commandYear,
commandId: command.id,
templateDoc: command.positionDetail,
remark: command.positionDetail,
amount: x.amount,
amountSpecial: x.amountSpecial,
positionSalaryAmount: x.positionSalaryAmount,
mouthSalaryAmount: x.mouthSalaryAmount,
refCommandCode: command.commandType.refCommandCode,
refCommandName: command.commandType.name,
commandCode: command.commandType.commandCode,
commandName: command.commandType.name,
commandDateAffect: command.commandExcecuteDate,
commandDateSign: command.commandAffectDate,
})),
},
false,
@ -172,3 +173,4 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise<boolean> {
return false;
}
}