2658 lines
118 KiB
TypeScript
2658 lines
118 KiB
TypeScript
import { Controller, Post, Route, Security, Tags, Request, UploadedFile } from "tsoa";
|
|
import { AppDataSource } from "../database/data-source";
|
|
import { In, IsNull, LessThanOrEqual, Not } from "typeorm";
|
|
import HttpSuccess from "../interfaces/http-success";
|
|
import { UseInterceptors } from "@nestjs/common";
|
|
import { Profile } from "../entities/Profile";
|
|
import { ProfileEmployee } from "../entities/ProfileEmployee";
|
|
import { ProfileSalary } from "../entities/ProfileSalary";
|
|
import { ProfileFamilyCouple } from "../entities/ProfileFamilyCouple";
|
|
import { ProfileFamilyMother } from "../entities/ProfileFamilyMother";
|
|
import { ProfileFamilyFather } from "../entities/ProfileFamilyFather";
|
|
import { ProfileEducation } from "../entities/ProfileEducation";
|
|
import { PosLevel } from "../entities/PosLevel";
|
|
import { PosType } from "../entities/PosType";
|
|
import { FileInterceptor } from "@nestjs/platform-express";
|
|
import * as xlsx from "xlsx";
|
|
import Extension from "../interfaces/extension";
|
|
import { calculateRetireDate, calculateRetireLaw } from "../interfaces/utils";
|
|
import * as fs from "fs";
|
|
import * as path from "path";
|
|
const { createConnection } = require("typeorm");
|
|
import csvParser from "csv-parser";
|
|
import { HR_PERSONAL_OFFICER_FAMILY } from "../entities/HR_PERSONAL_OFFICER_FAMILY";
|
|
|
|
const BATCH_SIZE = 1000;
|
|
// import { EducationMis } from "../entities/EducationMis";
|
|
import { EducationMis } from "../entities/EducationMis";
|
|
import { ProvinceImport } from "../entities/ProvinceImport";
|
|
import { AmphurImport } from "../entities/AmphurImport";
|
|
import { SubDistrictImport } from "../entities/SubDistrictImport";
|
|
import { Province } from "../entities/Province";
|
|
import { District } from "../entities/District";
|
|
import { SubDistrict } from "../entities/SubDistrict";
|
|
import { HR_EDUCATION } from "../entities/HR_EDUCATION";
|
|
import { HR_PERSONAL_OFFICER_ADDRESS } from "../entities/HR_PERSONAL_OFFICER_ADDRESS";
|
|
import { HR_EDUCATION_EMP } from "../entities/HR_EDUCATION_EMP";
|
|
import { HR_PERSONAL_EMP_ADDRESS } from "../entities/HR_PERSONAL_EMP_ADDRESS";
|
|
import { HR_PERSONAL_EMP_FAMILY } from "../entities/HR_PERSONAL_EMP_FAMILY";
|
|
import { OrgRoot } from "../entities/OrgRoot";
|
|
import { OrgChild1 } from "../entities/OrgChild1";
|
|
import { OrgChild2 } from "../entities/OrgChild2";
|
|
import { OrgChild3 } from "../entities/OrgChild3";
|
|
import { OrgChild4 } from "../entities/OrgChild4";
|
|
import { IMPORT_ORG } from "../entities/IMPORT_ORG";
|
|
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 { PosExecutive } from "../entities/PosExecutive";
|
|
import { EducationLevel } from "../entities/EducationLevel";
|
|
import { HR_FUND_COURSE_CODE } from "../entities/HR_FUND_COURSE_CODE";
|
|
import { HR_MAJOR_CODE } from "../entities/HR_MAJOR_CODE";
|
|
// import { uuidv7 } from "uuidv7";
|
|
import { ProfileSalaries } from "../entities/ProfileSalaries";
|
|
import { HR_POSITION_OFFICER } from "../entities/HR_POSITION_OFFICER";
|
|
@Route("api/v1/org/upload")
|
|
@Tags("UPLOAD")
|
|
@Security("bearerAuth")
|
|
export class ImportDataController extends Controller {
|
|
private profileEducationRepo = AppDataSource.getRepository(ProfileEducation);
|
|
private profileFamilyCoupleRepository = AppDataSource.getRepository(ProfileFamilyCouple);
|
|
private profileFamilyMotherRepository = AppDataSource.getRepository(ProfileFamilyMother);
|
|
private profileFamilyFatherRepository = AppDataSource.getRepository(ProfileFamilyFather);
|
|
private salaryRepo = AppDataSource.getRepository(ProfileSalary);
|
|
private profileRepo = AppDataSource.getRepository(Profile);
|
|
private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee);
|
|
private posLevelRepo = AppDataSource.getRepository(PosLevel);
|
|
private posTypeRepo = AppDataSource.getRepository(PosType);
|
|
private positionOfficerRepo = AppDataSource.getRepository(positionOfficer);
|
|
private ProfileSalariesRepo = AppDataSource.getRepository(ProfileSalaries);
|
|
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(
|
|
HR_PERSONAL_OFFICER_ADDRESS,
|
|
);
|
|
private HR_EDUCATION_EMPRepo = AppDataSource.getRepository(HR_EDUCATION_EMP);
|
|
private HR_PERSONAL_EMP_ADDRESSRepo = AppDataSource.getRepository(HR_PERSONAL_EMP_ADDRESS);
|
|
private HR_PERSONAL_EMP_FAMILYRepo = AppDataSource.getRepository(HR_PERSONAL_EMP_FAMILY);
|
|
|
|
private educationMisRepo = AppDataSource.getRepository(EducationMis);
|
|
private educationLevelRepo = AppDataSource.getRepository(EducationLevel);
|
|
private HR_MAJOR_CODERepo = AppDataSource.getRepository(HR_MAJOR_CODE);
|
|
private HR_FUND_COURSE_CODERepo = AppDataSource.getRepository(HR_FUND_COURSE_CODE);
|
|
private HR_POSITION_OFFICERRepo = AppDataSource.getRepository(HR_POSITION_OFFICER);
|
|
private provincsRepo = AppDataSource.getRepository(ProvinceImport);
|
|
private amphurRepo = AppDataSource.getRepository(AmphurImport);
|
|
private subDistrictRepo = AppDataSource.getRepository(SubDistrictImport);
|
|
private provinceIdRepo = AppDataSource.getRepository(Province);
|
|
private districtIdRepo = AppDataSource.getRepository(District);
|
|
private subDistrictIdRepo = AppDataSource.getRepository(SubDistrict);
|
|
|
|
private orgRevisionRepo = AppDataSource.getRepository(OrgRevision);
|
|
private orgRootRepo = AppDataSource.getRepository(OrgRoot);
|
|
private orgChild1Repo = AppDataSource.getRepository(OrgChild1);
|
|
private orgChild2Repo = AppDataSource.getRepository(OrgChild2);
|
|
private orgChild3Repo = AppDataSource.getRepository(OrgChild3);
|
|
private orgChild4Repo = AppDataSource.getRepository(OrgChild4);
|
|
private IMPORT_ORGRepo = AppDataSource.getRepository(IMPORT_ORG);
|
|
private OFFICERRepo = AppDataSource.getRepository(OFFICER);
|
|
private positionRepo = AppDataSource.getRepository(Position);
|
|
private posMasterRepo = AppDataSource.getRepository(PosMaster);
|
|
private posExecutiveRepo = AppDataSource.getRepository(PosExecutive);
|
|
/**
|
|
* @summary ทะเบียนประวัติ ข้าราชการ
|
|
*/
|
|
@Post("uploadProfile-Officer")
|
|
async UploadFileSqlOfficer(@Request() request: { user: Record<string, any> }) {
|
|
const OFFICER = await this.OFFICERRepo.find();
|
|
// let users = [];
|
|
let rowCount = 0;
|
|
// const filePath = path.resolve(__dirname, "OFFICER.csv"); // Corrected file path
|
|
// const readStream = fs.createReadStream(filePath).pipe(csvParser());
|
|
// let profiles: any = [];
|
|
let _null: any = null;
|
|
let profile: any;
|
|
// await Promise.all(
|
|
// OFFICER.map(async (item) => {
|
|
for await (const item of OFFICER) {
|
|
// readStream.map(async (item: any) => {
|
|
rowCount++;
|
|
let type_: any = null;
|
|
let level_: any = null;
|
|
profile = null;
|
|
profile = new Profile();
|
|
// if (item["FLAG_RETIRE_STATUSxxxx != "" && item["FLAG_RETIRE_STATUSxxxx != null) {
|
|
// continue;
|
|
// }
|
|
// if (item["FLAG_PERSON_TYPExxxx != "1") {
|
|
// continue;
|
|
// }
|
|
// if (new Date(item.RET_YEAR).getFullYear() >= 2567) {
|
|
// return;
|
|
// }
|
|
|
|
const existingProfile = await this.profileRepo.findOne({
|
|
where: { citizenId: item.id.toString() },
|
|
});
|
|
if (existingProfile) {
|
|
profile.id = existingProfile.id;
|
|
// continue;
|
|
}
|
|
|
|
if (item.MP_CATEGORY) {
|
|
type_ = await this.posTypeRepo.findOne({
|
|
where: { posTypeName: item.MP_CATEGORY },
|
|
});
|
|
}
|
|
if (item.MP_LEVEL) {
|
|
if (type_ == null) {
|
|
level_ = await this.posLevelRepo.findOne({
|
|
where: {
|
|
posLevelName: item.MP_LEVEL,
|
|
},
|
|
});
|
|
} else {
|
|
level_ = await this.posLevelRepo.findOne({
|
|
where: {
|
|
posLevelName: item.MP_LEVEL,
|
|
posTypeId: type_.id,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
let dateRetire = new Date(item.BORN);
|
|
profile.citizenId = item.id.toString() == "" ? "" : item.id.toString();
|
|
profile.rank =
|
|
item.RANK_NAME == "" ||
|
|
item.RANK_NAME == "นาย" ||
|
|
item.RANK_NAME == "นาง" ||
|
|
item.RANK_NAME == "นางสาว"
|
|
? null
|
|
: item.RANK_NAME;
|
|
profile.prefix = item.RANK_NAME == "" ? null : item.RANK_NAME;
|
|
profile.prefixMain =
|
|
item.RANK_NAME == "" ||
|
|
(item.RANK_NAME != "นาย" && item.RANK_NAME != "นาง" && item.RANK_NAME != "นางสาว")
|
|
? null
|
|
: item.RANK_NAME;
|
|
profile.firstName = item.FNAME == "" ? null : item.FNAME;
|
|
profile.lastName = item.LNAME == "" ? null : item.LNAME;
|
|
profile.gender = item.SEX == "1" ? "ชาย" : item.SEX == "2" ? "หญิง" : _null;
|
|
profile.birthDate = item.BORN == "" ? _null : new Date(item.BORN);
|
|
profile.dateAppoint = item.BEGIN_ENTRY_DATE == "" ? _null : new Date(item.BEGIN_ENTRY_DATE);
|
|
profile.dateStart = item.BEGIN_ENTRY_DATE == "" ? _null : new Date(item.BEGIN_ENTRY_DATE);
|
|
profile.dateRetire = dateRetire == null ? _null : calculateRetireDate(dateRetire);
|
|
profile.dateRetireLaw = dateRetire == null ? _null : calculateRetireLaw(dateRetire);
|
|
profile.position = item.WORK_LINE_NAME == "" ? null : item.WORK_LINE_NAME;
|
|
profile.posTypeId =
|
|
type_ != null && type_.posTypeName == item.MP_CATEGORY && type_ ? type_.id : null;
|
|
profile.posLevelId =
|
|
level_ != null && level_.posLevelName == item.MP_LEVEL && level_ ? level_.id : null;
|
|
// profile.relationship =
|
|
// item.สถานภาพ == "" ? "" : Extension.CheckRelationship(item.สถานภาพ);
|
|
// profile.position =
|
|
// item.WORK_LINE_NAME == "" ? "" : Extension.CheckRelationship(item.WORK_LINE_NAME);
|
|
profile.position = item["WORK_LINE_NAME"] == "" ? null : item["WORK_LINE_NAME"];
|
|
// const level = await this.posLevelRepo.findOne({
|
|
// where: {
|
|
// posLevelName: item.MP_LEVEL,
|
|
// posType: {
|
|
// posTypeName: item.MP_Type,
|
|
// },
|
|
// },
|
|
// });
|
|
// profile.posLevelId = level?.id ?? _null;
|
|
// const type = await this.posTypeRepo.findOne({
|
|
// where: { posTypeName: item.MP_Type },
|
|
// });
|
|
// profile.posTypeId = type?.id ?? _null;
|
|
profile.amount = item.SALARY == "" ? 0 : Number(item.SALARY);
|
|
// profile.isLeave =
|
|
// item.FLAG_RETIRE_STATUSxxxx == "" || item.FLAG_RETIRE_STATUSxxxx == null ? false : true;
|
|
profile.createdUserId = request.user.sub;
|
|
profile.createdFullName = request.user.name;
|
|
profile.lastUpdateUserId = request.user.sub;
|
|
profile.lastUpdateFullName = request.user.name;
|
|
profile.createdAt = new Date();
|
|
profile.lastUpdatedAt = new Date();
|
|
// profiles.push(profile);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
|
|
// if (profiles.length === BATCH_SIZE) {
|
|
await this.profileRepo.save(profile);
|
|
// console.log(profile);
|
|
// profiles = await [];
|
|
// if (global.gc) {
|
|
// global.gc();
|
|
// }
|
|
// }
|
|
}
|
|
// }),
|
|
// );
|
|
// )
|
|
// );
|
|
// console.log(rowCount);
|
|
// await this.profileRepo.save(profiles);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary ทะเบียนประวัติ ลูกจ้างประจำ
|
|
*/
|
|
@Post("uploadProfile-Employee")
|
|
async UploadFileSQL(@Request() request: { user: Record<string, any> }) {
|
|
let users = [];
|
|
let rowCount = 0;
|
|
const filePath = path.resolve(__dirname, "EMP.csv"); // Corrected file path
|
|
const readStream = fs.createReadStream(filePath).pipe(csvParser());
|
|
let profiles: any = [];
|
|
let _null: any = null;
|
|
let profileEmp: any;
|
|
|
|
for await (const item of readStream) {
|
|
rowCount++;
|
|
profileEmp = null;
|
|
profileEmp = new ProfileEmployee();
|
|
// if (item["FLAG_RETIRE_STATUS"] != "" && item["FLAG_RETIRE_STATUS"] != null) {
|
|
// continue;
|
|
// }
|
|
// if (item["FLAG_PERSON_TYPE"] != "6") {
|
|
// continue;
|
|
// }
|
|
// if (new Date(item["RET_YEAR"]).getFullYear() >= 2567) {
|
|
// continue;
|
|
// }
|
|
const existingProfile = await this.profileEmpRepo.findOne({
|
|
where: { citizenId: item["ID"] },
|
|
});
|
|
if (existingProfile) {
|
|
profileEmp.id = existingProfile.id;
|
|
// continue;
|
|
}
|
|
|
|
let dateRetire = new Date(item["MP_FORCE_DATE"]);
|
|
|
|
profileEmp.citizenId = item["ID"] == "" ? "" : item["ID"];
|
|
profileEmp.employeeClass =
|
|
item["FLAG_PERSON_TYPE"] == "6" ? "PERM" : item["FLAG_PERSON_TYPE"] == "7" ? "TEMP" : "";
|
|
profileEmp.rank =
|
|
item["RANK_NAME"] == "" ||
|
|
item["RANK_NAME"] == "นาย" ||
|
|
item["RANK_NAME"] == "นาง" ||
|
|
item["RANK_NAME"] == "นางสาว"
|
|
? null
|
|
: item["RANK_NAME"];
|
|
profileEmp.prefix = item["RANK_NAME"] == "" ? null : item["RANK_NAME"];
|
|
profileEmp.prefixMain =
|
|
item["RANK_NAME"] == "" ||
|
|
(item["RANK_NAME"] != "นาย" && item["RANK_NAME"] != "นาง" && item["RANK_NAME"] != "นางสาว")
|
|
? null
|
|
: item["RANK_NAME"];
|
|
profileEmp.firstName = item["FNAME"] == "" ? null : item["FNAME"];
|
|
profileEmp.lastName = item["LNAME"] == "" ? null : item["LNAME"];
|
|
profileEmp.gender = item["SEX"] == "1" ? "ชาย" : item["SEX"] == "2" ? "หญิง" : _null;
|
|
profileEmp.birthDate = item["BORN"] == "" ? _null : new Date(item["BORN"]);
|
|
profileEmp.dateAppoint =
|
|
item["BEGIN_ENTRY_DATE"] == "" ? _null : new Date(item["BEGIN_ENTRY_DATE"]);
|
|
profileEmp.dateStart = item["MP_FORCE_DATE"] == "" ? _null : new Date(item["MP_FORCE_DATE"]);
|
|
profileEmp.dateRetire = dateRetire == null ? _null : calculateRetireDate(dateRetire);
|
|
profileEmp.dateRetireLaw = dateRetire == null ? _null : calculateRetireLaw(dateRetire);
|
|
profileEmp.position = item["WORK_LINE_NAME"] == "" ? null : item["WORK_LINE_NAME"];
|
|
profileEmp.salaryLevel = item["SALARY_LEVEL_CODE"] == "" ? null : item["SALARY_LEVEL_CODE"];
|
|
profileEmp.relationship =
|
|
item["MARRIAGE_STATE"] == "" ? "" : Extension.CheckRelationship(item["MARRIAGE_STATE"]);
|
|
profileEmp.amount =
|
|
item["SALARY"] == "" ? 0 : Number(Extension.CheckRelationship(item.SALARY));
|
|
profileEmp.createdUserId = request.user.sub;
|
|
profileEmp.createdFullName = request.user.name;
|
|
profileEmp.lastUpdateUserId = request.user.sub;
|
|
profileEmp.lastUpdateFullName = request.user.name;
|
|
profileEmp.createdAt = new Date();
|
|
profileEmp.lastUpdatedAt = new Date();
|
|
// profiles.push(profileEmp);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
|
|
// if (profiles.length === BATCH_SIZE) {
|
|
await this.profileEmpRepo.save(profileEmp);
|
|
// profiles = await [];
|
|
// if (global.gc) {
|
|
// global.gc();
|
|
// }
|
|
// }
|
|
}
|
|
// console.log(rowCount);
|
|
// await this.profileEmpRepo.save(profiles);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ข้าราชการ
|
|
*/
|
|
@Post("uploadProfileSalary-Officer")
|
|
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")
|
|
// .where("profile.citizenId = '3101702379675'")
|
|
// .where({
|
|
// citizenId: In([
|
|
// // "1100600109451",
|
|
// // "1209900075508",
|
|
// // "1739900231556",
|
|
// // "1809900305214",
|
|
// // "1920600228762",
|
|
// // "3101600963742",
|
|
// // "3102401171243",
|
|
// // "3120100454406",
|
|
// // "3180100306172",
|
|
// // "3700100094722",
|
|
// // "3809900116957",
|
|
// "3940900213929",
|
|
// ]),
|
|
// })
|
|
.skip(0)
|
|
.take(10000)
|
|
.getManyAndCount();
|
|
var _profiles: ProfileSalary[] = [];
|
|
const filePath = path.join(__dirname, "salaryProfile1.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","refId"\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) => {
|
|
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: any = new ProfileSalary();
|
|
profileSalary.profileId = _item.id;
|
|
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 == null
|
|
? _null
|
|
: new Date(item.mp_command_date.setDate(item.mp_command_date.getDate() + 1))
|
|
.toISOString()
|
|
.replace("T", " ")
|
|
.substring(0, 19);
|
|
profileSalary.commandDateAffect =
|
|
item.mp_pos_date == null
|
|
? _null
|
|
: new Date(item.mp_pos_date.setDate(item.mp_pos_date.getDate() + 1))
|
|
.toISOString()
|
|
.replace("T", " ")
|
|
.substring(0, 19);
|
|
if (
|
|
[
|
|
"0",
|
|
"11",
|
|
"22",
|
|
"31",
|
|
"39",
|
|
"45",
|
|
"46",
|
|
"47",
|
|
"49",
|
|
"50",
|
|
"51",
|
|
"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", "56"].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 = "รักษาราชการ, ช่วยราชการ";
|
|
}
|
|
if (item.flag_to_name_code == null && item.flag_to_name == "ลาศึกษาต่อ") {
|
|
profileSalary.commandCode = "0";
|
|
profileSalary.commandName = "อื่น ๆ";
|
|
} else if (
|
|
item.flag_to_name_code == null &&
|
|
(item.flag_to_name == "เลื่อน 1 ขั้นและเลื่อนระดับ" ||
|
|
item.flag_to_name == "เลื่อน 0.5 ขั้นและเลื่อนระดับ")
|
|
) {
|
|
profileSalary.commandCode = "4";
|
|
profileSalary.commandName = "เลื่อน";
|
|
} else if (item.flag_to_name_code == null && item.flag_to_name == "เลื่อนเงินเดือน") {
|
|
profileSalary.commandCode = "5";
|
|
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
|
|
} else if (
|
|
item.flag_to_name_code == null &&
|
|
(item.flag_to_name == "ปรับตามบัญชีเงินเดือนใหม่" ||
|
|
item.flag_to_name == "เลื่อนเงินเดือน" ||
|
|
item.flag_to_name == "ปรับเงินเดือนตาม กพ.")
|
|
) {
|
|
profileSalary.commandCode = "6";
|
|
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
|
|
} else if (
|
|
item.flag_to_name_code == null &&
|
|
item.flag_to_name == "แต่งตั้งตามการปรับปรุงโครงฯ"
|
|
) {
|
|
profileSalary.commandCode = "8";
|
|
profileSalary.commandName = "ปรับโครงสร้าง";
|
|
} else if (
|
|
item.flag_to_name_code == null &&
|
|
item.flag_to_name == "พ้นทดลองปฏิบัติราชการ"
|
|
) {
|
|
profileSalary.commandCode = "9";
|
|
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
|
|
} else if (item.flag_to_name_code == null && item.flag_to_name == "ให้โอนมา") {
|
|
profileSalary.commandCode = "11";
|
|
profileSalary.commandName = "รับโอน";
|
|
} else if (
|
|
item.flag_to_name_code == null &&
|
|
item.flag_to_name == "โอนไปปฏิบัติราชการที่อื่น"
|
|
) {
|
|
profileSalary.commandCode = "12";
|
|
profileSalary.commandName = "ให้โอน";
|
|
} else if (item.flag_to_name_code == null && item.flag_to_name == "ยกเลิกคำสั่ง") {
|
|
profileSalary.commandCode = "14";
|
|
profileSalary.commandName = "ยกเลิกคำสั่ง";
|
|
} else if (item.flag_to_name_code == null && item.flag_to_name == "รักษาการในตำแหน่ง") {
|
|
profileSalary.commandCode = "17";
|
|
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
|
|
}
|
|
if (
|
|
(profileSalary.commandCode == null || profileSalary.commandCode == undefined) &&
|
|
(profileSalary.commandName == null || profileSalary.commandName == undefined)
|
|
) {
|
|
if (
|
|
[
|
|
"อื่นๆ",
|
|
"กลับไปปฏิบัติงานทางต้นสังกัด",
|
|
"เปลี่ยนประเภทข้าราชการ",
|
|
"โอนสับเปลี่ยน",
|
|
"เข้ารับฝึกอบรม",
|
|
"ดูงาน",
|
|
"ศึกษาต่อ",
|
|
"ขยายเวลาเข้ารับการฝึกอบรม",
|
|
"ขยายเวลาศึกษาต่อ",
|
|
"รายงานตัวกลับเข้าปฏิบัติราชการ",
|
|
"ไม่ได้เลื่อนขั้น",
|
|
"ตัดเงินเดือน",
|
|
"ลดขั้นเงินเดือน",
|
|
"ให้ข้าราชการกลับเข้ารับราชการ",
|
|
"ไม่ระบุ",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "0";
|
|
profileSalary.commandName = "อื่น ๆ";
|
|
} else if (
|
|
[
|
|
"บรรจุและแต่งตั้งผู้สอบแข่งขันได้",
|
|
"ทดลองปฎิบัติราชการ",
|
|
"ทดลองปฏิบัติราชการและปรับวุฒิ",
|
|
"บรรจุใหม่",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "1";
|
|
profileSalary.commandName = "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
|
|
} else if (["บรรจุและแต่งตั้งผู้ได้รับการคัดเลือก"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "2";
|
|
profileSalary.commandName = "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
|
|
} else if (
|
|
[
|
|
"แต่งตั้ง (ย้ายสับเปลี่ยน)",
|
|
"แต่งตั้ง (ย้าย)",
|
|
"แต่งตั้ง",
|
|
"เปลี่ยนสายงาน",
|
|
"เปลี่ยนตำแหน่ง",
|
|
"ตัดโอนตำแหน่ง",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "3";
|
|
profileSalary.commandName = "แต่งตั้ง ย้าย";
|
|
} else if (
|
|
["เลื่อนและแต่งตั้ง", "เลื่อนระดับ", "เลื่อนเงินเดือนและระดับ"].includes(
|
|
item.flag_to_name,
|
|
)
|
|
) {
|
|
profileSalary.commandCode = "4";
|
|
profileSalary.commandName = "เลื่อน";
|
|
} else if (["เลื่อนขั้นเงินเดือน", "เลื่อนเงินเดือน"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "5";
|
|
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
|
|
} else if (
|
|
[
|
|
"ปรับเงินเดือนตามคุณวุฒิ",
|
|
"ได้รับเงินตอบแทนพิเศษ",
|
|
"เงินเพิ่มการครองชีพชั่วคราว",
|
|
"เลื่อนขั้นเงินเดือนกรณีพิเศษ",
|
|
"ปรับอัตราเงินเดือนตามบัญชีอัตราเงินเดือนใหม่ ท้าย พ.ร.บ. เงินเดือนและเงินประจำตำ",
|
|
"ปรับอัตราเงินเดือนตามพระราชกฤษฎีกา การปรับอัตราเงินเดือนของข้าราชการ",
|
|
"เลื่อนขั้นเงินเดือน (เพิ่มเติม)",
|
|
"ปรับอัตราเงินเดือน",
|
|
"ให้ข้าราชการได้รับเงินเดือนตามคุณวุฒิ",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "6";
|
|
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
|
|
} else if (["--"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "7";
|
|
profileSalary.commandName = "เงินพิเศษอื่น ๆ";
|
|
} else if (
|
|
["ปรับโครงสร้าง", "แต่งตั้ง (จัดคนลงกรอบ)", "แต่งตั้งตามแผนอัตรากำลังฯ"].includes(
|
|
item.flag_to_name,
|
|
)
|
|
) {
|
|
profileSalary.commandCode = "8";
|
|
profileSalary.commandName = "ปรับโครงสร้าง";
|
|
} else if (["พ้นทดลองปฏิบัติราชการ"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "9";
|
|
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
|
|
} else if (
|
|
[
|
|
"บรรจุกลับ",
|
|
"บรรจุกลับข้าราชการ",
|
|
"บรรจุและแต่งตั้งผู้ไปรับราชการทหารกลับเข้ารับราชการ",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "10";
|
|
profileSalary.commandName = "บรรจุกลับ";
|
|
} else if (
|
|
[
|
|
"รับโอนข้าราชการตามกฎหมายอื่น",
|
|
"รับโอนข้าราชการตามกฎหมายอื่น ผู้สอบแข่งขันได้",
|
|
"รับโอนข้าราชการตามกฏหมายอื่น โดยการคัดเลือก",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "11";
|
|
profileSalary.commandName = "รับโอน";
|
|
} else if (["ให้โอน"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "12";
|
|
profileSalary.commandName = "ให้โอน";
|
|
} else if (["แก้ไขคำสั่ง"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "13";
|
|
profileSalary.commandName = "แก้ไขคำสั่ง";
|
|
} else if (["ยกเลิกคำสั่ง"].includes(item.flag_to_name)) {
|
|
profileSalary.commandCode = "14";
|
|
profileSalary.commandName = "ยกเลิกคำสั่ง";
|
|
} else if (
|
|
[
|
|
"ลาออกจากราชการ",
|
|
"พ้นจากราชการ/ลาออกจากราชการตามมาตรการพัฒนาและบริหารกำลังคน",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "15";
|
|
profileSalary.commandName = "ลาออกจากราชการ";
|
|
} else if (
|
|
[
|
|
"พ้นจากราชการ/เพื่อไปปฏิบัติราชการทหาร",
|
|
"เกษียณ",
|
|
"ไม่พ้นทดลองปฏิบัติราชการ",
|
|
"พ้นจากราชการ/ให้ออก",
|
|
"พ้นจากราชการ/ไล่ออก",
|
|
"พ้นจากราชการ/เสียชีวิต",
|
|
"พ้นจากราชการ/ปลดออก",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "16";
|
|
profileSalary.commandName = "พ้นจากราชการ";
|
|
} else if (
|
|
[
|
|
"แต่งตั้งข้าราชการรักษาราชการแทน",
|
|
"ช่วยราชการ",
|
|
"รักษาการ",
|
|
"รักษาราชการแทน",
|
|
"มอบหมายให้ปฏิบัติหน้าที่",
|
|
"มอบหมายข้าราชการปฏิบัติหน้าที่แทน",
|
|
].includes(item.flag_to_name)
|
|
) {
|
|
profileSalary.commandCode = "17";
|
|
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
|
|
} else {
|
|
profileSalary.commandCode = "0";
|
|
profileSalary.commandName = item.flag_to_name;
|
|
}
|
|
}
|
|
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;
|
|
profileSalary.refId = item.id;
|
|
profileSalary.isEntry = false;
|
|
|
|
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;
|
|
|
|
profileSalary.createdUserId = request.user.sub;
|
|
profileSalary.createdFullName = request.user.name;
|
|
profileSalary.lastUpdateUserId = request.user.sub;
|
|
profileSalary.lastUpdateFullName = request.user.name;
|
|
profileSalary.createdAt = new Date().toISOString().split("T")[0];
|
|
profileSalary.lastUpdatedAt = new Date().toISOString().split("T")[0];
|
|
// 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) => {
|
|
console.log(profileSalary.commandDateSign);
|
|
csvData = `"${profileSalary.id || "NULL"}","${profileSalary.createdAt || "NULL"}","${profileSalary.createdUserId || "NULL"}","${profileSalary.lastUpdatedAt || "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 || "NULL"}","${profileSalary.commandDateAffect || "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 || "NULL"}","${profileSalary.isGovernment || "NULL"}","${profileSalary.commandId || "NULL"}","${profileSalary.refId || "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);
|
|
// // 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();
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ลูกจ้างประจำ
|
|
*/
|
|
@Post("uploadProfileSalary-Employee")
|
|
async UploadFileSQLSalaryEmp(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let _null: any = null;
|
|
|
|
const [profiles, total] = await AppDataSource.getRepository(ProfileEmployee)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
.skip(0)
|
|
.take(10000)
|
|
.getManyAndCount();
|
|
|
|
await Promise.all(
|
|
profiles.map(async (_item) => {
|
|
const existingProfile = await this.positionOfficerRepo.find({
|
|
where: { citizenId: _item.citizenId, flag_person_type: "7" },
|
|
});
|
|
|
|
await Promise.all(
|
|
existingProfile.map(async (item) => {
|
|
rowCount++;
|
|
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 == ""
|
|
? _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.commandId;
|
|
|
|
profileSalary.createdUserId = request.user.sub;
|
|
profileSalary.createdFullName = request.user.name;
|
|
profileSalary.lastUpdateUserId = request.user.sub;
|
|
profileSalary.lastUpdateFullName = request.user.name;
|
|
profileSalary.createdAt = new Date();
|
|
profileSalary.lastUpdatedAt = new Date();
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
// save to file
|
|
// await this.salaryRepo.save(profileSalary);
|
|
}),
|
|
);
|
|
}),
|
|
);
|
|
console.log(rowCount);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary ครอบครัว ข้าราชการ
|
|
*/
|
|
@Post("uploadProfileFamily-Officer")
|
|
async UploadFileSQLFamily(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let fathers: any = [];
|
|
let mothers: any = [];
|
|
let couples: any = [];
|
|
|
|
const [profiles, total] = await AppDataSource.getRepository(Profile)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(1000)
|
|
.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();
|
|
|
|
await Promise.all(
|
|
profiles.map(async (_item) => {
|
|
const existingProfile = await this.HR_PERSONAL_OFFICER_FAMILYRepo.findOne({
|
|
where: { CIT: _item.citizenId },
|
|
select: [
|
|
"CIT",
|
|
"FATHER_RANK_NAME",
|
|
"FATHER_FNAME",
|
|
"FATHER_LNAME",
|
|
"MOTHER_RANK_NAME",
|
|
"MOTHER_FNAME",
|
|
"MOTHER_LNAME",
|
|
"SPOUSE_RANK_NAME",
|
|
"SPOUSE_FNAME",
|
|
"SPOUSE_LNAME",
|
|
"SPOUSE_ID",
|
|
"MARRIAGE_STATE",
|
|
],
|
|
});
|
|
if (!existingProfile) {
|
|
return;
|
|
}
|
|
|
|
rowCount++;
|
|
const profileFather = new ProfileFamilyFather();
|
|
const profileMother = new ProfileFamilyMother();
|
|
const profileCouple = new ProfileFamilyCouple();
|
|
|
|
profileFather.profileId = _item.id;
|
|
profileFather.fatherPrefix = existingProfile.FATHER_RANK_NAME;
|
|
profileFather.fatherFirstName = existingProfile.FATHER_FNAME;
|
|
profileFather.fatherLastName = existingProfile.FATHER_LNAME;
|
|
profileFather.createdUserId = request.user.sub;
|
|
profileFather.createdFullName = request.user.name;
|
|
profileFather.lastUpdateUserId = request.user.sub;
|
|
profileFather.lastUpdateFullName = request.user.name;
|
|
profileFather.createdAt = new Date();
|
|
profileFather.lastUpdatedAt = new Date();
|
|
|
|
profileMother.profileId = _item.id;
|
|
profileMother.motherPrefix = existingProfile.MOTHER_RANK_NAME;
|
|
profileMother.motherFirstName = existingProfile.MOTHER_FNAME;
|
|
profileMother.motherLastName = existingProfile.MOTHER_LNAME;
|
|
profileMother.createdUserId = request.user.sub;
|
|
profileMother.createdFullName = request.user.name;
|
|
profileMother.lastUpdateUserId = request.user.sub;
|
|
profileMother.lastUpdateFullName = request.user.name;
|
|
profileMother.createdAt = new Date();
|
|
profileMother.lastUpdatedAt = new Date();
|
|
|
|
profileCouple.profileId = _item.id;
|
|
profileCouple.couplePrefix = existingProfile.SPOUSE_RANK_NAME;
|
|
profileCouple.coupleFirstName = existingProfile.SPOUSE_FNAME;
|
|
profileCouple.coupleLastName = existingProfile.SPOUSE_LNAME;
|
|
profileCouple.coupleCitizenId = existingProfile.SPOUSE_ID;
|
|
profileCouple.relationship =
|
|
existingProfile.MARRIAGE_STATE == "1"
|
|
? "โสด"
|
|
: existingProfile.MARRIAGE_STATE == "2"
|
|
? "สมรส"
|
|
: existingProfile.MARRIAGE_STATE == "3"
|
|
? "หย่าร้าง"
|
|
: existingProfile.MARRIAGE_STATE == "4"
|
|
? "หม้าย"
|
|
: "-";
|
|
// profileCouple.coupleLive = existingProfile.LIFE_SPOUSE;
|
|
profileCouple.createdUserId = request.user.sub;
|
|
profileCouple.createdFullName = request.user.name;
|
|
profileCouple.lastUpdateUserId = request.user.sub;
|
|
profileCouple.lastUpdateFullName = request.user.name;
|
|
profileCouple.createdAt = new Date();
|
|
profileCouple.lastUpdatedAt = new Date();
|
|
|
|
// fathers.push(profileFather);
|
|
// mothers.push(profileMother);
|
|
// couples.push(profileCouple);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
|
|
// if (fathers.length === BATCH_SIZE) {
|
|
await this.profileFamilyFatherRepository.save(profileFather);
|
|
// fathers = await [];
|
|
// }
|
|
// if (mothers.length === BATCH_SIZE) {
|
|
await this.profileFamilyMotherRepository.save(profileMother);
|
|
// mothers = await [];
|
|
// }
|
|
// if (couples.length === BATCH_SIZE) {
|
|
await this.profileFamilyCoupleRepository.save(profileCouple);
|
|
// couples = await [];
|
|
// }
|
|
}),
|
|
);
|
|
// }
|
|
// console.log(rowCount);
|
|
|
|
// await Promise.all([
|
|
// this.profileFamilyFatherRepository.save(fathers),
|
|
// this.profileFamilyMotherRepository.save(mothers),
|
|
// this.profileFamilyCoupleRepository.save(couples),
|
|
// ]);
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary ครอบครัว ลูกจ้างประจำ
|
|
*/
|
|
@Post("uploadProfileFamily-Employee")
|
|
async UploadFileSQLFamilyEmp(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let fathers: any = [];
|
|
let mothers: any = [];
|
|
let couples: any = [];
|
|
|
|
const [profiles, total] = await AppDataSource.getRepository(ProfileEmployee)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(20)
|
|
.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_PERSONAL_EMP_FAMILYRepo.findOne({
|
|
where: { CIT: _item.citizenId },
|
|
select: [
|
|
"CIT",
|
|
"FATHER_RANK_NAME",
|
|
"FATHER_FNAME",
|
|
"FATHER_LNAME",
|
|
"MOTHER_RANK_NAME",
|
|
"MOTHER_FNAME",
|
|
"MOTHER_LNAME",
|
|
"SPOUSE_RANK_NAME",
|
|
"SPOUSE_FNAME",
|
|
"SPOUSE_LNAME",
|
|
"SPOUSE_ID",
|
|
"MARRIAGE_STATE",
|
|
],
|
|
});
|
|
if (!existingProfile) {
|
|
return;
|
|
}
|
|
|
|
rowCount++;
|
|
const profileFather = new ProfileFamilyFather();
|
|
const profileMother = new ProfileFamilyMother();
|
|
const profileCouple = new ProfileFamilyCouple();
|
|
|
|
profileFather.profileEmployeeId = _item.id;
|
|
profileFather.fatherPrefix = existingProfile.FATHER_RANK_NAME;
|
|
profileFather.fatherFirstName = existingProfile.FATHER_FNAME;
|
|
profileFather.fatherLastName = existingProfile.FATHER_LNAME;
|
|
profileFather.createdUserId = request.user.sub;
|
|
profileFather.createdFullName = request.user.name;
|
|
profileFather.lastUpdateUserId = request.user.sub;
|
|
profileFather.lastUpdateFullName = request.user.name;
|
|
profileFather.createdAt = new Date();
|
|
profileFather.lastUpdatedAt = new Date();
|
|
|
|
profileMother.profileEmployeeId = _item.id;
|
|
profileMother.motherPrefix = existingProfile.MOTHER_RANK_NAME;
|
|
profileMother.motherFirstName = existingProfile.MOTHER_FNAME;
|
|
profileMother.motherLastName = existingProfile.MOTHER_LNAME;
|
|
profileMother.createdUserId = request.user.sub;
|
|
profileMother.createdFullName = request.user.name;
|
|
profileMother.lastUpdateUserId = request.user.sub;
|
|
profileMother.lastUpdateFullName = request.user.name;
|
|
profileMother.createdAt = new Date();
|
|
profileMother.lastUpdatedAt = new Date();
|
|
|
|
profileCouple.profileEmployeeId = _item.id;
|
|
profileCouple.couplePrefix = existingProfile.SPOUSE_RANK_NAME;
|
|
profileCouple.coupleFirstName = existingProfile.SPOUSE_FNAME;
|
|
profileCouple.coupleLastName = existingProfile.SPOUSE_LNAME;
|
|
profileCouple.coupleCitizenId = existingProfile.SPOUSE_ID;
|
|
profileCouple.relationship =
|
|
existingProfile.MARRIAGE_STATE == "1"
|
|
? "โสด"
|
|
: existingProfile.MARRIAGE_STATE == "2"
|
|
? "สมรส"
|
|
: existingProfile.MARRIAGE_STATE == "3"
|
|
? "หย่าร้าง"
|
|
: existingProfile.MARRIAGE_STATE == "4"
|
|
? "หม้าย"
|
|
: "-";
|
|
// profileCouple.coupleLive = existingProfile.LIFE_SPOUSE;
|
|
profileCouple.createdUserId = request.user.sub;
|
|
profileCouple.createdFullName = request.user.name;
|
|
profileCouple.lastUpdateUserId = request.user.sub;
|
|
profileCouple.lastUpdateFullName = request.user.name;
|
|
profileCouple.createdAt = new Date();
|
|
profileCouple.lastUpdatedAt = new Date();
|
|
|
|
// fathers.push(profileFather);
|
|
// mothers.push(profileMother);
|
|
// couples.push(profileCouple);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
|
|
// if (fathers.length === BATCH_SIZE) {
|
|
await this.profileFamilyFatherRepository.save(profileFather);
|
|
// fathers = await [];
|
|
// }
|
|
// if (mothers.length === BATCH_SIZE) {
|
|
await this.profileFamilyMotherRepository.save(profileMother);
|
|
// mothers = await [];
|
|
// }
|
|
// if (couples.length === BATCH_SIZE) {
|
|
await this.profileFamilyCoupleRepository.save(profileCouple);
|
|
// couples = await [];
|
|
// }
|
|
}),
|
|
);
|
|
// }
|
|
// console.log(rowCount);
|
|
|
|
// await Promise.all([
|
|
// this.profileFamilyFatherRepository.save(fathers),
|
|
// this.profileFamilyMotherRepository.save(mothers),
|
|
// this.profileFamilyCoupleRepository.save(couples),
|
|
// ]);
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary Import Education
|
|
*/
|
|
@Post("ImportEducation")
|
|
@UseInterceptors(FileInterceptor("file"))
|
|
async UploadFileSQLEducationCode(
|
|
@UploadedFile() file: Express.Multer.File,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const workbook = xlsx.read(file.buffer, { type: "buffer" });
|
|
const sheetName = workbook.SheetNames[0];
|
|
const sheet = workbook.Sheets[sheetName];
|
|
const getExcel = xlsx.utils.sheet_to_json(sheet);
|
|
let educationMis_: any = [];
|
|
|
|
await Promise.all(
|
|
getExcel.map(async (item: any) => {
|
|
const educationMis = new EducationMis();
|
|
educationMis.EDUCATION_CODE = item.EDUCATION_CODE;
|
|
educationMis.EDUCATION_NAME = item.EDUCATION_NAME;
|
|
educationMis.EDUCATION_ABB_NAME = item.EDUCATION_ABB_NAME;
|
|
educationMis.createdUserId = request.user.sub;
|
|
educationMis.createdFullName = request.user.name;
|
|
educationMis.lastUpdateUserId = request.user.sub;
|
|
educationMis.lastUpdateFullName = request.user.name;
|
|
educationMis.createdAt = new Date();
|
|
educationMis.lastUpdatedAt = new Date();
|
|
educationMis_.push(educationMis);
|
|
}),
|
|
);
|
|
await this.educationMisRepo.save(educationMis_);
|
|
return new HttpSuccess(educationMis_);
|
|
}
|
|
|
|
/**
|
|
* @summary ประวัติการศึกษา ข้าราชการ
|
|
*/
|
|
@Post("uploadProfileEducation-Officer")
|
|
async UploadFileSQLEducation(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let educations: any = [];
|
|
let _null: any = null;
|
|
const [profiles, total] = await AppDataSource.getRepository(Profile)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(20)
|
|
.getManyAndCount();
|
|
// for (var i = 1; i <= 2; i++) {
|
|
// const profiles = await AppDataSource.getRepository(Profile)
|
|
// .createQueryBuilder("profile")
|
|
// .select(["profile.citizenId", "profile.id"])
|
|
// .orderBy("profile.citizenId", "ASC")
|
|
// .skip((i - 1) * 5)
|
|
// .take(5)
|
|
// .getMany();
|
|
|
|
for (const _item of profiles) {
|
|
const existingProfile = await this.HR_EDUCATIONRepo.find({
|
|
where: { CIT: _item.citizenId },
|
|
// select: [
|
|
// "CIT",
|
|
// "EDUCATION_CODE",
|
|
// "START_EDUCATION_YEAR",
|
|
// "EDUCATION_YEAR",
|
|
// "INSTITUE",
|
|
// "EDUCATION_SEQ",
|
|
// ],
|
|
order: { EDUCATION_SEQ: "ASC" },
|
|
});
|
|
|
|
const educationLevel = await this.profileEducationRepo.findOne({
|
|
select: ["id", "level", "profileId"],
|
|
where: { profileId: _item.id },
|
|
order: { level: "DESC" },
|
|
});
|
|
|
|
// educations = await [];
|
|
for (const item of existingProfile) {
|
|
rowCount++;
|
|
const education = new ProfileEducation();
|
|
const educationCode = await this.educationMisRepo.findOne({
|
|
where: { EDUCATION_CODE: item.EDUCATION_CODE },
|
|
});
|
|
const hrMajorCode = await this.HR_MAJOR_CODERepo.findOne({
|
|
where: { MAJOR_CODE: item.MAJOR_CODE },
|
|
});
|
|
const hrFundCourseCode = await this.HR_FUND_COURSE_CODERepo.findOne({
|
|
where: { FUND_COURSE_CODE: item.FUND_COURSE_CODE },
|
|
});
|
|
|
|
let startDate = item.START_EDUCATION_YEAR
|
|
? Extension.ConvertToDateTimeV2(item.START_EDUCATION_YEAR)
|
|
: _null;
|
|
// startDate = startDate ? new Date(startDate, 0, 1) : _null;
|
|
|
|
let endDate = item.EDUCATION_YEAR
|
|
? Extension.ConvertToDateTimeV2(item.EDUCATION_YEAR)
|
|
: _null;
|
|
// endDate = endDate ? new Date(endDate, 0, 1) : _null;
|
|
if (item.FLAG_EDUCATION == "1") {
|
|
const checkData = await this.HR_EDUCATIONRepo.find({
|
|
where: { CIT: _item.citizenId, FLAG_EDUCATION: "1" },
|
|
order: { EDUCATION_SEQ: "DESC" },
|
|
});
|
|
if ((checkData.length > 1 && checkData[0].id == item.id) || checkData.length == 1) {
|
|
education.isEducation = true;
|
|
const findIsHigh = await this.HR_EDUCATIONRepo.findOne({
|
|
where: { CIT: _item.citizenId, FLAG_EDUCATION: "3" },
|
|
});
|
|
if (findIsHigh == null) {
|
|
education.isHigh = true;
|
|
}
|
|
}
|
|
} else if (item.FLAG_EDUCATION == "2") {
|
|
} else if (item.FLAG_EDUCATION == "3") {
|
|
const checkData = await this.HR_EDUCATIONRepo.find({
|
|
where: { CIT: _item.citizenId, FLAG_EDUCATION: "3" },
|
|
order: { EDUCATION_SEQ: "DESC" },
|
|
});
|
|
if ((checkData.length > 1 && checkData[0].id == item.id) || checkData.length == 1) {
|
|
education.isHigh = true;
|
|
const findIsEducation = await this.HR_EDUCATIONRepo.findOne({
|
|
where: { CIT: _item.citizenId, FLAG_EDUCATION: "1" },
|
|
});
|
|
if (findIsEducation == null) {
|
|
education.isEducation = true;
|
|
}
|
|
}
|
|
}
|
|
education.level = educationLevel == null ? 1 : educationLevel.level + 1;
|
|
education.profileId = _item.id;
|
|
education.degree = educationCode ? educationCode.EDUCATION_NAME : _null;
|
|
education.field = hrMajorCode ? hrMajorCode.MAJOR_NAME : _null;
|
|
education.educationLevel = hrFundCourseCode ? hrFundCourseCode.FUND_COURSE_NAME : _null;
|
|
education.educationLevelId = hrFundCourseCode ? hrFundCourseCode.refId : _null;
|
|
education.institute = item.INSTITUE;
|
|
education.level = item.EDUCATION_SEQ ? Number(item.EDUCATION_SEQ) : _null;
|
|
education.startDate = startDate;
|
|
education.endDate = endDate;
|
|
education.createdUserId = request.user.sub;
|
|
education.createdFullName = request.user.name;
|
|
education.lastUpdateUserId = request.user.sub;
|
|
education.lastUpdateFullName = request.user.name;
|
|
education.createdAt = new Date();
|
|
education.lastUpdatedAt = new Date();
|
|
// await educations.push(await education);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
await this.profileEducationRepo.save(await education);
|
|
}
|
|
// await this.profileEducationRepo.save(educations);
|
|
// educations = await [];
|
|
}
|
|
// }
|
|
// console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
// await this.profileEducationRepo.save(educations);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary ประวัติการศึกษา ลูกจ้างประจำ
|
|
*/
|
|
@Post("uploadProfileEducation-Employee")
|
|
async UploadFileSQLEducationEmp(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let educations: any = [];
|
|
let _null: any = null;
|
|
const [profiles, total] = await AppDataSource.getRepository(ProfileEmployee)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(20)
|
|
.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_EDUCATION_EMPRepo.find({
|
|
where: { CIT: _item.citizenId },
|
|
select: [
|
|
"CIT",
|
|
"EDUCATION_CODE",
|
|
"START_EDUCATION_YEAR",
|
|
"EDUCATION_YEAR",
|
|
"INSTITUE",
|
|
"EDUCATION_SEQ",
|
|
],
|
|
});
|
|
|
|
const educationLevel = await this.profileEducationRepo.findOne({
|
|
select: ["id", "level", "profileId"],
|
|
where: { profileEmployeeId: _item.id },
|
|
order: { level: "DESC" },
|
|
});
|
|
|
|
educations = await [];
|
|
await Promise.all(
|
|
existingProfile.map(async (item) => {
|
|
rowCount++;
|
|
const education = new ProfileEducation();
|
|
const educationCode = await this.educationMisRepo.findOne({
|
|
where: { EDUCATION_CODE: item.EDUCATION_CODE },
|
|
});
|
|
|
|
let startDate = item.START_EDUCATION_YEAR
|
|
? Extension.ConvertToDateTimeV2(item.START_EDUCATION_YEAR)
|
|
: _null;
|
|
// startDate = startDate ? new Date(startDate, 0, 1) : _null;
|
|
|
|
let endDate = item.EDUCATION_YEAR
|
|
? Extension.ConvertToDateTimeV2(item.EDUCATION_YEAR)
|
|
: _null;
|
|
// endDate = endDate ? new Date(endDate, 0, 1) : _null;
|
|
|
|
education.level = educationLevel == null ? 1 : educationLevel.level + 1;
|
|
education.profileEmployeeId = _item.id;
|
|
education.degree = educationCode ? educationCode.EDUCATION_NAME : "";
|
|
education.institute = item.INSTITUE;
|
|
education.level = item.EDUCATION_SEQ ? _null : Number(item.EDUCATION_SEQ);
|
|
education.startDate = startDate;
|
|
education.endDate = endDate;
|
|
education.createdUserId = request.user.sub;
|
|
education.createdFullName = request.user.name;
|
|
education.lastUpdateUserId = request.user.sub;
|
|
education.lastUpdateFullName = request.user.name;
|
|
education.createdAt = new Date();
|
|
education.lastUpdatedAt = new Date();
|
|
// educations.push(education);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
await this.profileEducationRepo.save(education);
|
|
}),
|
|
);
|
|
// await this.profileEducationRepo.save(educations);
|
|
}),
|
|
);
|
|
// }
|
|
// console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
// await this.profileEducationRepo.save(educations);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary Import Province
|
|
*/
|
|
@Post("ImportProvince")
|
|
@UseInterceptors(FileInterceptor("file"))
|
|
async ImportProvince(
|
|
@UploadedFile() file: Express.Multer.File,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const workbook = xlsx.read(file.buffer, { type: "buffer" });
|
|
const sheetName = workbook.SheetNames[0];
|
|
const sheet = workbook.Sheets[sheetName];
|
|
const getExcel = xlsx.utils.sheet_to_json(sheet);
|
|
let provinces_: any = [];
|
|
|
|
await Promise.all(
|
|
getExcel.map(async (item: any) => {
|
|
const prov = new ProvinceImport();
|
|
prov.PROVINCE_CODE = item.PROVINCE_CODE;
|
|
prov.PROVINCE_NAME = item.PROVINCE_NAME;
|
|
prov.createdUserId = request.user.sub;
|
|
prov.createdFullName = request.user.name;
|
|
prov.lastUpdateUserId = request.user.sub;
|
|
prov.lastUpdateFullName = request.user.name;
|
|
prov.createdAt = new Date();
|
|
prov.lastUpdatedAt = new Date();
|
|
provinces_.push(prov);
|
|
}),
|
|
);
|
|
await this.provincsRepo.save(provinces_);
|
|
return new HttpSuccess(provinces_);
|
|
}
|
|
|
|
/**
|
|
* @summary Import Amphur
|
|
*/
|
|
@Post("ImportAmphur")
|
|
@UseInterceptors(FileInterceptor("file"))
|
|
async ImportAmphur(
|
|
@UploadedFile() file: Express.Multer.File,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const workbook = xlsx.read(file.buffer, { type: "buffer" });
|
|
const sheetName = workbook.SheetNames[0];
|
|
const sheet = workbook.Sheets[sheetName];
|
|
const getExcel = xlsx.utils.sheet_to_json(sheet);
|
|
let amphur_: any = [];
|
|
|
|
await Promise.all(
|
|
getExcel.map(async (item: any) => {
|
|
const amh = new AmphurImport();
|
|
amh.PROVINCE_CODE = item.PROVINCE_CODE;
|
|
amh.AMPHUR_CODE = item.AMPHUR_CODE;
|
|
amh.AMPHUR_NAME = item.AMPHUR_NAME;
|
|
amh.createdUserId = request.user.sub;
|
|
amh.createdFullName = request.user.name;
|
|
amh.lastUpdateUserId = request.user.sub;
|
|
amh.lastUpdateFullName = request.user.name;
|
|
amh.createdAt = new Date();
|
|
amh.lastUpdatedAt = new Date();
|
|
amphur_.push(amh);
|
|
}),
|
|
);
|
|
await this.amphurRepo.save(amphur_);
|
|
return new HttpSuccess(amphur_);
|
|
}
|
|
|
|
/**
|
|
* @summary Import SubDistrict
|
|
*/
|
|
@Post("ImportSubDistrict")
|
|
@UseInterceptors(FileInterceptor("file"))
|
|
async ImportSubDistrict(
|
|
@UploadedFile() file: Express.Multer.File,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const workbook = xlsx.read(file.buffer, { type: "buffer" });
|
|
const sheetName = workbook.SheetNames[0];
|
|
const sheet = workbook.Sheets[sheetName];
|
|
const getExcel = xlsx.utils.sheet_to_json(sheet);
|
|
let subDistrict_: any = [];
|
|
|
|
await Promise.all(
|
|
getExcel.map(async (item: any) => {
|
|
const subD = new SubDistrictImport();
|
|
subD.PROVINCE_CODE = item.PROVINCE_CODE;
|
|
subD.AMPHUR_CODE = item.AMPHUR_CODE;
|
|
subD.DISTRICT_CODE = item.DISTRICT_CODE;
|
|
subD.DISTRICT_NAME = item.DISTRICT_NAME;
|
|
subD.createdUserId = request.user.sub;
|
|
subD.createdFullName = request.user.name;
|
|
subD.lastUpdateUserId = request.user.sub;
|
|
subD.lastUpdateFullName = request.user.name;
|
|
subD.createdAt = new Date();
|
|
subD.lastUpdatedAt = new Date();
|
|
subDistrict_.push(subD);
|
|
}),
|
|
);
|
|
await this.subDistrictRepo.save(subDistrict_);
|
|
return new HttpSuccess(subDistrict_);
|
|
}
|
|
|
|
/**
|
|
* @summary ที่อยู่ตามทะเบียนบ้าน-ปัจจุบัน ข้าราชการ
|
|
*/
|
|
@Post("uploadProfileAddress-Officer")
|
|
async UploadFileSQLAddress(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let _null: any = null;
|
|
const [profiles, total] = await AppDataSource.getRepository(Profile)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(20)
|
|
.getManyAndCount();
|
|
const meta = {
|
|
createdUserId: request.user.sub,
|
|
createdFullName: request.user.name,
|
|
lastUpdateUserId: request.user.sub,
|
|
lastUpdateFullName: request.user.name,
|
|
createdAt: new Date(),
|
|
lastUpdatedAt: new Date(),
|
|
};
|
|
for (const _item of profiles) {
|
|
const existingProfile = await this.HR_PERSONAL_OFFICER_ADDRESSRepo.findOne({
|
|
where: { CIT: _item.citizenId },
|
|
});
|
|
|
|
if (!existingProfile) {
|
|
continue;
|
|
}
|
|
let PROVINCE_CODE = Number(existingProfile.PROVINCE_CODE).toString();
|
|
let DISTRICT_CODE = Number(existingProfile.DISTRICT_CODE).toString();
|
|
let AMPHUR_CODE = Number(existingProfile.AMPHUR_CODE).toString();
|
|
let CONTACT_PROVINCE_CODE = Number(existingProfile.CONTACT_PROVINCE_CODE).toString();
|
|
let CONTACT_DISTRICT_CODE = Number(existingProfile.CONTACT_DISTRICT_CODE).toString();
|
|
let CONTACT_AMPHUR_CODE = Number(existingProfile.CONTACT_AMPHUR_CODE).toString();
|
|
rowCount++;
|
|
//registration address
|
|
if (PROVINCE_CODE) {
|
|
let provinceRegis_ = await this.provincsRepo.findOne({
|
|
where: { PROVINCE_CODE: PROVINCE_CODE },
|
|
});
|
|
if (provinceRegis_) {
|
|
let provinceId = await this.provinceIdRepo.findOne({
|
|
where: {
|
|
name: provinceRegis_.PROVINCE_NAME,
|
|
},
|
|
});
|
|
if (provinceId == null) {
|
|
provinceId = new Province();
|
|
Object.assign(provinceId, {
|
|
...meta,
|
|
name: provinceRegis_.PROVINCE_NAME,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.registrationProvinceId = provinceId ? provinceId.id : _null;
|
|
if (AMPHUR_CODE) {
|
|
let districtRegis_ = await this.amphurRepo.findOne({
|
|
where: {
|
|
AMPHUR_CODE: AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceRegis_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (districtRegis_) {
|
|
let districtId = await this.districtIdRepo.findOne({
|
|
where: {
|
|
name: districtRegis_.AMPHUR_NAME,
|
|
},
|
|
});
|
|
if (districtId == null) {
|
|
districtId = new District();
|
|
Object.assign(districtId, {
|
|
...meta,
|
|
name: districtRegis_.AMPHUR_NAME,
|
|
provinceId: provinceId.id,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.registrationDistrictId = districtId ? districtId.id : _null;
|
|
if (DISTRICT_CODE) {
|
|
let subDistrictRegis_ = await this.subDistrictRepo.findOne({
|
|
where: {
|
|
DISTRICT_CODE: DISTRICT_CODE,
|
|
AMPHUR_CODE: districtRegis_.AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceRegis_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (subDistrictRegis_) {
|
|
let subDistrictId = await this.subDistrictIdRepo.findOne({
|
|
where: {
|
|
name: subDistrictRegis_.DISTRICT_NAME,
|
|
},
|
|
});
|
|
if (subDistrictId == null) {
|
|
subDistrictId = new SubDistrict();
|
|
Object.assign(subDistrictId, {
|
|
...meta,
|
|
name: subDistrictRegis_.DISTRICT_NAME,
|
|
zipCode: existingProfile.ZIPCODE,
|
|
districtId: districtId.id,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.registrationSubDistrictId = subDistrictId ? subDistrictId.id : _null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//current address
|
|
if (CONTACT_PROVINCE_CODE) {
|
|
let provinceCurr_ = await this.provincsRepo.findOne({
|
|
where: { PROVINCE_CODE: CONTACT_PROVINCE_CODE },
|
|
});
|
|
if (provinceCurr_) {
|
|
let provinceId = await this.provinceIdRepo.findOne({
|
|
where: {
|
|
name: provinceCurr_.PROVINCE_NAME,
|
|
},
|
|
});
|
|
if (provinceId == null) {
|
|
provinceId = new Province();
|
|
Object.assign(provinceId, {
|
|
...meta,
|
|
name: provinceCurr_.PROVINCE_NAME,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.currentProvinceId = provinceId ? provinceId.id : _null;
|
|
if (CONTACT_AMPHUR_CODE) {
|
|
let districtCurr_ = await this.amphurRepo.findOne({
|
|
where: {
|
|
AMPHUR_CODE: CONTACT_AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceCurr_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (districtCurr_) {
|
|
let districtId = await this.districtIdRepo.findOne({
|
|
where: {
|
|
name: districtCurr_.AMPHUR_NAME,
|
|
},
|
|
});
|
|
if (districtId == null) {
|
|
districtId = new District();
|
|
Object.assign(districtId, {
|
|
...meta,
|
|
name: districtCurr_.AMPHUR_NAME,
|
|
provinceId: provinceId.id,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.currentDistrictId = districtId ? districtId.id : _null;
|
|
if (CONTACT_DISTRICT_CODE) {
|
|
let subDistrictCurr_ = await this.subDistrictRepo.findOne({
|
|
where: {
|
|
DISTRICT_CODE: CONTACT_DISTRICT_CODE,
|
|
AMPHUR_CODE: districtCurr_.AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceCurr_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (subDistrictCurr_) {
|
|
let subDistrictId = await this.subDistrictIdRepo.findOne({
|
|
where: {
|
|
name: subDistrictCurr_.DISTRICT_NAME,
|
|
},
|
|
});
|
|
if (subDistrictId == null) {
|
|
subDistrictId = new SubDistrict();
|
|
Object.assign(subDistrictId, {
|
|
...meta,
|
|
name: subDistrictCurr_.DISTRICT_NAME,
|
|
zipCode: existingProfile.CONTACT_ZIPCODE,
|
|
districtId: districtId.id,
|
|
});
|
|
await this.provinceIdRepo.save(provinceId);
|
|
}
|
|
_item.currentSubDistrictId = subDistrictId ? subDistrictId.id : _null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
_item.registrationAddress = existingProfile.H_NUMBER;
|
|
_item.registrationZipCode = existingProfile.ZIPCODE;
|
|
_item.currentAddress = existingProfile.CONTACT_H_NUMBER;
|
|
_item.currentZipCode = existingProfile.CONTACT_ZIPCODE;
|
|
_item.createdUserId = request.user.sub;
|
|
_item.createdFullName = request.user.name;
|
|
_item.lastUpdateUserId = request.user.sub;
|
|
_item.lastUpdateFullName = request.user.name;
|
|
_item.createdAt = new Date();
|
|
_item.lastUpdatedAt = new Date();
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
await this.profileRepo.save(_item);
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary ที่อยู่ตามทะเบียนบ้าน-ปัจจุบัน ลูกจ้างประจำ
|
|
*/
|
|
@Post("uploadProfileAddress-Employee")
|
|
async UploadFileSQLAddressEmp(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
let profileDatas: any = [];
|
|
let _null: any = null;
|
|
const [profiles, total] = await AppDataSource.getRepository(ProfileEmployee)
|
|
.createQueryBuilder("profile")
|
|
.select(["profile.citizenId", "profile.id"])
|
|
.orderBy("profile.citizenId", "ASC")
|
|
// .skip(0)
|
|
// .take(20)
|
|
.getManyAndCount();
|
|
// for (var i = 1; i <= total / BATCH_SIZE; i++) {
|
|
// const profiles = await AppDataSource.getRepository(ProfileEmployee)
|
|
// .createQueryBuilder("profile")
|
|
// .orderBy("profile.citizenId", "ASC")
|
|
// .skip((i - 1) * BATCH_SIZE)
|
|
// .take(BATCH_SIZE)
|
|
// .getMany();
|
|
// profileDatas = await [];
|
|
await Promise.all(
|
|
profiles.map(async (_item) => {
|
|
const existingProfile = await this.HR_PERSONAL_EMP_ADDRESSRepo.findOne({
|
|
where: { CIT: _item.citizenId },
|
|
});
|
|
|
|
if (!existingProfile) {
|
|
return;
|
|
}
|
|
|
|
rowCount++;
|
|
let provinceRegis_: any = null;
|
|
let districtRegis_: any = null;
|
|
let subDistrictRegis_: any = null;
|
|
let provinceCurr_: any = null;
|
|
let districtCurr_: any = null;
|
|
let subDistrictCurr_: any = null;
|
|
//registration address
|
|
if (existingProfile.PROVINCE_CODE) {
|
|
provinceRegis_ = await this.provincsRepo.findOne({
|
|
where: { PROVINCE_CODE: existingProfile.PROVINCE_CODE },
|
|
});
|
|
if (provinceRegis_) {
|
|
let provinceId = await this.provinceIdRepo.findOne({
|
|
where: {
|
|
name: provinceRegis_.PROVINCE_NAME,
|
|
},
|
|
});
|
|
_item.registrationProvinceId = provinceId ? provinceId.id : _null;
|
|
}
|
|
}
|
|
if (existingProfile.AMPHUR_CODE && provinceRegis_) {
|
|
districtRegis_ = await this.amphurRepo.findOne({
|
|
where: {
|
|
AMPHUR_CODE: existingProfile.AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceRegis_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (districtRegis_) {
|
|
let districtId = await this.districtIdRepo.findOne({
|
|
where: {
|
|
name: districtRegis_.AMPHUR_NAME,
|
|
},
|
|
});
|
|
_item.registrationDistrictId = districtId ? districtId.id : _null;
|
|
}
|
|
}
|
|
if (existingProfile.DISTRICT_CODE && districtRegis_ && provinceRegis_) {
|
|
subDistrictRegis_ = await this.subDistrictRepo.findOne({
|
|
where: {
|
|
DISTRICT_CODE: existingProfile.DISTRICT_CODE,
|
|
AMPHUR_CODE: districtRegis_.AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceRegis_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (subDistrictRegis_) {
|
|
let subDistrictId = await this.subDistrictIdRepo.findOne({
|
|
where: {
|
|
name: subDistrictRegis_.DISTRICT_NAME,
|
|
},
|
|
});
|
|
_item.registrationSubDistrictId = subDistrictId ? subDistrictId.id : _null;
|
|
}
|
|
}
|
|
//current address
|
|
if (existingProfile.CONTACT_PROVINCE_CODE) {
|
|
provinceCurr_ = await this.provincsRepo.findOne({
|
|
where: { PROVINCE_CODE: existingProfile.CONTACT_PROVINCE_CODE },
|
|
});
|
|
if (provinceCurr_) {
|
|
let provinceId = await this.provinceIdRepo.findOne({
|
|
where: {
|
|
name: provinceCurr_.PROVINCE_NAME,
|
|
},
|
|
});
|
|
_item.currentProvinceId = provinceId ? provinceId.id : _null;
|
|
}
|
|
}
|
|
if (existingProfile.CONTACT_AMPHUR_CODE && provinceCurr_) {
|
|
districtCurr_ = await this.amphurRepo.findOne({
|
|
where: {
|
|
AMPHUR_CODE: existingProfile.CONTACT_AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceCurr_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (districtCurr_) {
|
|
let districtId = await this.districtIdRepo.findOne({
|
|
where: {
|
|
name: districtCurr_.AMPHUR_NAME,
|
|
},
|
|
});
|
|
_item.currentDistrictId = districtId ? districtId.id : _null;
|
|
}
|
|
}
|
|
if (existingProfile.CONTACT_DISTRICT_CODE && districtCurr_ && provinceCurr_) {
|
|
subDistrictCurr_ = await this.subDistrictRepo.findOne({
|
|
where: {
|
|
DISTRICT_CODE: existingProfile.CONTACT_DISTRICT_CODE,
|
|
AMPHUR_CODE: districtCurr_.AMPHUR_CODE,
|
|
PROVINCE_CODE: provinceCurr_.PROVINCE_CODE,
|
|
},
|
|
});
|
|
if (subDistrictCurr_) {
|
|
let subDistrictId = await this.subDistrictIdRepo.findOne({
|
|
where: {
|
|
name: subDistrictCurr_.DISTRICT_NAME,
|
|
},
|
|
});
|
|
_item.currentSubDistrictId = subDistrictId ? subDistrictId.id : _null;
|
|
}
|
|
}
|
|
_item.registrationAddress = existingProfile.H_NUMBER;
|
|
_item.registrationZipCode = existingProfile.ZIPCODE;
|
|
_item.currentAddress = existingProfile.CONTACT_H_NUMBER;
|
|
_item.currentZipCode = existingProfile.CONTACT_ZIPCODE;
|
|
_item.createdUserId = request.user.sub;
|
|
_item.createdFullName = request.user.name;
|
|
_item.lastUpdateUserId = request.user.sub;
|
|
_item.lastUpdateFullName = request.user.name;
|
|
_item.createdAt = new Date();
|
|
_item.lastUpdatedAt = new Date();
|
|
// profileDatas.push(_item);
|
|
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
await this.profileEmpRepo.save(_item);
|
|
}),
|
|
);
|
|
// await this.profileEmpRepo.save(profileDatas);
|
|
// }
|
|
// console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
|
|
return new HttpSuccess();
|
|
}
|
|
/**
|
|
* @summary ทะเบียนประวัติ ข้าราชการ
|
|
*/
|
|
@Post("cleardataupload")
|
|
async ClearDataUpload(@Request() request: { user: Record<string, any> }) {
|
|
const profileOff = await this.profileRepo.find({
|
|
select: ["citizenId"],
|
|
});
|
|
const profileEmp = await this.profileEmpRepo.find({
|
|
select: ["citizenId"],
|
|
});
|
|
const _profileOff = profileOff.map((x) => x.citizenId);
|
|
const _profileEmp = profileEmp.map((x) => x.citizenId);
|
|
const allId = _profileOff.concat(_profileEmp);
|
|
|
|
for (var i = 1; i <= 1000; i++) {
|
|
const positionOfficer = await this.positionOfficerRepo.find({
|
|
where: { citizenId: Not(In(allId)) },
|
|
take: 1000,
|
|
skip: 0,
|
|
});
|
|
this.positionOfficerRepo.remove(positionOfficer);
|
|
// const HR_PERSONAL_OFFICER_FAMILY = await this.HR_PERSONAL_OFFICER_FAMILYRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_PERSONAL_OFFICER_FAMILYRepo.remove(HR_PERSONAL_OFFICER_FAMILY);
|
|
// const HR_EDUCATION = await this.HR_EDUCATIONRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_EDUCATIONRepo.remove(HR_EDUCATION);
|
|
// const HR_PERSONAL_OFFICER_ADDRESS = await this.HR_PERSONAL_OFFICER_ADDRESSRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_PERSONAL_OFFICER_ADDRESSRepo.remove(HR_PERSONAL_OFFICER_ADDRESS);
|
|
// const HR_EDUCATION_EMP = await this.HR_EDUCATION_EMPRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_EDUCATION_EMPRepo.remove(HR_EDUCATION_EMP);
|
|
// const HR_PERSONAL_EMP_ADDRESS = await this.HR_PERSONAL_EMP_ADDRESSRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_PERSONAL_EMP_ADDRESSRepo.remove(HR_PERSONAL_EMP_ADDRESS);
|
|
// const HR_PERSONAL_EMP_FAMILY = await this.HR_PERSONAL_EMP_FAMILYRepo.find({
|
|
// where: { CIT: Not(In(allId)) },
|
|
// take: 1000,
|
|
// skip: 0,
|
|
// });
|
|
// this.HR_PERSONAL_EMP_FAMILYRepo.remove(HR_PERSONAL_EMP_FAMILY);
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary Import Org
|
|
*/
|
|
@Post("ImportOrg")
|
|
async ImportOrg(@Request() request: { user: Record<string, any> }) {
|
|
const orgRevision = await this.orgRevisionRepo.findOne({
|
|
// where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false },
|
|
where: { id: "30e594c9-a65b-485e-a4c5-71aa497e6b8a" },
|
|
});
|
|
if (orgRevision == null) return new HttpSuccess();
|
|
//create root
|
|
const IMPORT_CHILD = await this.IMPORT_ORGRepo.find({
|
|
where: {
|
|
orgRoot: Not(""),
|
|
orgChild1: "",
|
|
orgChild2: "",
|
|
orgChild3: "",
|
|
},
|
|
});
|
|
let order = 1;
|
|
for (const item of IMPORT_CHILD) {
|
|
const orgRoot = new OrgRoot();
|
|
orgRoot.orgRootOrder = order;
|
|
orgRoot.orgRootName = item.orgRoot;
|
|
orgRoot.orgRootShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgRoot.orgRootRank = rank;
|
|
orgRoot.orgRootRankSub = item.orgSubRank;
|
|
orgRoot.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgRoot.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgRoot.SECTION_CODE = item.SECTION_CODE;
|
|
orgRoot.JOB_CODE = item.JOB_CODE;
|
|
orgRoot.orgRevisionId = orgRevision.id;
|
|
orgRoot.createdUserId = request.user.sub;
|
|
orgRoot.createdFullName = request.user.name;
|
|
orgRoot.lastUpdateUserId = request.user.sub;
|
|
orgRoot.lastUpdateFullName = request.user.name;
|
|
orgRoot.createdAt = new Date();
|
|
orgRoot.lastUpdatedAt = new Date();
|
|
await this.orgRootRepo.save(orgRoot);
|
|
order++;
|
|
}
|
|
|
|
//create child1
|
|
const IMPORT_CHILD1 = await this.IMPORT_ORGRepo.find({
|
|
where: {
|
|
orgRoot: Not(""),
|
|
orgChild1: Not(""),
|
|
orgChild2: "",
|
|
orgChild3: "",
|
|
},
|
|
});
|
|
|
|
for (const item of IMPORT_CHILD1) {
|
|
const orgChild1 = new OrgChild1();
|
|
let orgRoot = await this.orgRootRepo.findOne({
|
|
where: { orgRootName: item.orgRoot, orgRevisionId: orgRevision.id },
|
|
relations: ["orgChild1s"],
|
|
});
|
|
if (orgRoot == null) {
|
|
orgRoot = new OrgRoot();
|
|
orgRoot.orgRootOrder = order;
|
|
order = order + 1;
|
|
orgRoot.orgRootName = item.orgRoot;
|
|
orgRoot.orgRootShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgRoot.orgRootRank = rank;
|
|
orgRoot.orgRootRankSub = item.orgSubRank;
|
|
orgRoot.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgRoot.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgRoot.SECTION_CODE = item.SECTION_CODE;
|
|
orgRoot.JOB_CODE = item.JOB_CODE;
|
|
orgRoot.orgRevisionId = orgRevision.id;
|
|
orgRoot.createdUserId = request.user.sub;
|
|
orgRoot.createdFullName = request.user.name;
|
|
orgRoot.lastUpdateUserId = request.user.sub;
|
|
orgRoot.lastUpdateFullName = request.user.name;
|
|
orgRoot.createdAt = new Date();
|
|
orgRoot.lastUpdatedAt = new Date();
|
|
await this.orgRootRepo.save(orgRoot);
|
|
}
|
|
|
|
orgChild1.orgChild1Order =
|
|
orgRoot == null || orgRoot.orgChild1s == null || orgRoot.orgChild1s.length == 0
|
|
? 1
|
|
: orgRoot.orgChild1s.length + 1;
|
|
orgChild1.orgRootId = orgRoot.id;
|
|
orgChild1.orgChild1Name = item.orgChild1;
|
|
orgChild1.orgChild1ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild1.orgChild1Rank = rank;
|
|
orgChild1.orgChild1RankSub = item.orgSubRank;
|
|
orgChild1.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild1.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild1.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild1.JOB_CODE = item.JOB_CODE;
|
|
orgChild1.orgRevisionId = orgRevision.id;
|
|
orgChild1.createdUserId = request.user.sub;
|
|
orgChild1.createdFullName = request.user.name;
|
|
orgChild1.lastUpdateUserId = request.user.sub;
|
|
orgChild1.lastUpdateFullName = request.user.name;
|
|
orgChild1.createdAt = new Date();
|
|
orgChild1.lastUpdatedAt = new Date();
|
|
await this.orgChild1Repo.save(orgChild1);
|
|
}
|
|
|
|
//create child2
|
|
const IMPORT_CHILD2 = await this.IMPORT_ORGRepo.find({
|
|
where: {
|
|
orgRoot: Not(""),
|
|
orgChild1: Not(""),
|
|
orgChild2: Not(""),
|
|
orgChild3: "",
|
|
},
|
|
});
|
|
for (const item of IMPORT_CHILD2) {
|
|
const orgChild2 = new OrgChild2();
|
|
let orgRoot = await this.orgRootRepo.findOne({
|
|
where: { orgRootName: item.orgRoot, orgRevisionId: orgRevision.id },
|
|
relations: ["orgChild1s"],
|
|
});
|
|
if (orgRoot == null) {
|
|
orgRoot = new OrgRoot();
|
|
orgRoot.orgRootOrder = order;
|
|
order = order + 1;
|
|
orgRoot.orgRootName = item.orgRoot;
|
|
orgRoot.orgRootShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgRoot.orgRootRank = rank;
|
|
orgRoot.orgRootRankSub = item.orgSubRank;
|
|
orgRoot.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgRoot.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgRoot.SECTION_CODE = item.SECTION_CODE;
|
|
orgRoot.JOB_CODE = item.JOB_CODE;
|
|
orgRoot.orgRevisionId = orgRevision.id;
|
|
orgRoot.createdUserId = request.user.sub;
|
|
orgRoot.createdFullName = request.user.name;
|
|
orgRoot.lastUpdateUserId = request.user.sub;
|
|
orgRoot.lastUpdateFullName = request.user.name;
|
|
orgRoot.createdAt = new Date();
|
|
orgRoot.lastUpdatedAt = new Date();
|
|
await this.orgRootRepo.save(orgRoot);
|
|
}
|
|
let orgChild1 = await this.orgChild1Repo.findOne({
|
|
where: {
|
|
orgChild1Name: item.orgChild1,
|
|
orgRootId: orgRoot.id,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
relations: ["orgChild2s"],
|
|
});
|
|
if (orgChild1 == null) {
|
|
orgChild1 = new OrgChild1();
|
|
orgChild1.orgRootId = orgRoot.id;
|
|
orgChild1.orgChild1Order =
|
|
orgRoot == null || orgRoot.orgChild1s == null || orgRoot.orgChild1s.length == 0
|
|
? 1
|
|
: orgRoot.orgChild1s.length + 1;
|
|
orgChild1.orgChild1Name = item.orgChild1;
|
|
orgChild1.orgChild1ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild1.orgChild1Rank = rank;
|
|
orgChild1.orgChild1RankSub = item.orgSubRank;
|
|
orgChild1.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild1.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild1.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild1.JOB_CODE = item.JOB_CODE;
|
|
orgChild1.orgRevisionId = orgRevision.id;
|
|
orgChild1.createdUserId = request.user.sub;
|
|
orgChild1.createdFullName = request.user.name;
|
|
orgChild1.lastUpdateUserId = request.user.sub;
|
|
orgChild1.lastUpdateFullName = request.user.name;
|
|
orgChild1.createdAt = new Date();
|
|
orgChild1.lastUpdatedAt = new Date();
|
|
await this.orgChild1Repo.save(orgChild1);
|
|
}
|
|
orgChild2.orgChild2Order =
|
|
orgChild1 == null || orgChild1.orgChild2s == null || orgChild1.orgChild2s.length == 0
|
|
? 1
|
|
: orgChild1.orgChild2s.length + 1;
|
|
orgChild2.orgRootId = orgRoot.id;
|
|
orgChild2.orgChild1Id = orgChild1.id;
|
|
orgChild2.orgChild2Name = item.orgChild2;
|
|
orgChild2.orgChild2ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild2.orgChild2Rank = rank;
|
|
orgChild2.orgChild2RankSub = item.orgSubRank;
|
|
orgChild2.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild2.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild2.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild2.JOB_CODE = item.JOB_CODE;
|
|
orgChild2.orgRevisionId = orgRevision.id;
|
|
orgChild2.createdUserId = request.user.sub;
|
|
orgChild2.createdFullName = request.user.name;
|
|
orgChild2.lastUpdateUserId = request.user.sub;
|
|
orgChild2.lastUpdateFullName = request.user.name;
|
|
orgChild2.createdAt = new Date();
|
|
orgChild2.lastUpdatedAt = new Date();
|
|
await this.orgChild2Repo.save(orgChild2);
|
|
}
|
|
|
|
//create child3
|
|
const IMPORT_CHILD3 = await this.IMPORT_ORGRepo.find({
|
|
where: {
|
|
orgRoot: Not(""),
|
|
orgChild1: Not(""),
|
|
orgChild2: Not(""),
|
|
orgChild3: Not(""),
|
|
},
|
|
});
|
|
|
|
for (const item of IMPORT_CHILD3) {
|
|
const orgChild3 = new OrgChild3();
|
|
let orgRoot = await this.orgRootRepo.findOne({
|
|
where: { orgRootName: item.orgRoot, orgRevisionId: orgRevision.id },
|
|
relations: ["orgChild1s"],
|
|
});
|
|
if (orgRoot == null) {
|
|
orgRoot = new OrgRoot();
|
|
orgRoot.orgRootOrder = order;
|
|
order = order + 1;
|
|
orgRoot.orgRootName = item.orgRoot;
|
|
orgRoot.orgRootShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgRoot.orgRootRank = rank;
|
|
orgRoot.orgRootRankSub = item.orgSubRank;
|
|
orgRoot.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgRoot.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgRoot.SECTION_CODE = item.SECTION_CODE;
|
|
orgRoot.JOB_CODE = item.JOB_CODE;
|
|
orgRoot.orgRevisionId = orgRevision.id;
|
|
orgRoot.createdUserId = request.user.sub;
|
|
orgRoot.createdFullName = request.user.name;
|
|
orgRoot.lastUpdateUserId = request.user.sub;
|
|
orgRoot.lastUpdateFullName = request.user.name;
|
|
orgRoot.createdAt = new Date();
|
|
orgRoot.lastUpdatedAt = new Date();
|
|
await this.orgRootRepo.save(orgRoot);
|
|
}
|
|
let orgChild1 = await this.orgChild1Repo.findOne({
|
|
where: {
|
|
orgChild1Name: item.orgChild1,
|
|
orgRootId: orgRoot.id,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
relations: ["orgChild2s"],
|
|
});
|
|
if (orgChild1 == null) {
|
|
orgChild1 = new OrgChild1();
|
|
orgChild1.orgChild1Order =
|
|
orgRoot == null || orgRoot.orgChild1s == null || orgRoot.orgChild1s.length == 0
|
|
? 1
|
|
: orgRoot.orgChild1s.length + 1;
|
|
orgChild1.orgRootId = orgRoot.id;
|
|
orgChild1.orgChild1Name = item.orgChild1;
|
|
orgChild1.orgChild1ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild1.orgChild1Rank = rank;
|
|
orgChild1.orgChild1RankSub = item.orgSubRank;
|
|
orgChild1.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild1.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild1.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild1.JOB_CODE = item.JOB_CODE;
|
|
orgChild1.orgRevisionId = orgRevision.id;
|
|
orgChild1.createdUserId = request.user.sub;
|
|
orgChild1.createdFullName = request.user.name;
|
|
orgChild1.lastUpdateUserId = request.user.sub;
|
|
orgChild1.lastUpdateFullName = request.user.name;
|
|
orgChild1.createdAt = new Date();
|
|
orgChild1.lastUpdatedAt = new Date();
|
|
await this.orgChild1Repo.save(orgChild1);
|
|
}
|
|
let orgChild2 = await this.orgChild2Repo.findOne({
|
|
where: {
|
|
orgChild2Name: item.orgChild2,
|
|
orgChild1Id: orgChild1.id,
|
|
orgRootId: orgRoot.id,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
relations: ["orgChild3s"],
|
|
});
|
|
if (orgChild2 == null) {
|
|
orgChild2 = new OrgChild2();
|
|
orgChild2.orgChild2Order =
|
|
orgChild1 == null || orgChild1.orgChild2s == null || orgChild1.orgChild2s.length == 0
|
|
? 1
|
|
: orgChild1.orgChild2s.length + 1;
|
|
orgChild2.orgRootId = orgRoot.id;
|
|
orgChild2.orgChild1Id = orgChild1.id;
|
|
orgChild2.orgChild2Name = item.orgChild2;
|
|
orgChild2.orgChild2ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild2.orgChild2Rank = rank;
|
|
orgChild2.orgChild2RankSub = item.orgSubRank;
|
|
orgChild2.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild2.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild2.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild2.JOB_CODE = item.JOB_CODE;
|
|
orgChild2.orgRevisionId = orgRevision.id;
|
|
orgChild2.createdUserId = request.user.sub;
|
|
orgChild2.createdFullName = request.user.name;
|
|
orgChild2.lastUpdateUserId = request.user.sub;
|
|
orgChild2.lastUpdateFullName = request.user.name;
|
|
orgChild2.createdAt = new Date();
|
|
orgChild2.lastUpdatedAt = new Date();
|
|
await this.orgChild2Repo.save(orgChild2);
|
|
}
|
|
orgChild3.orgChild3Order =
|
|
orgChild2 == null || orgChild2.orgChild3s == null || orgChild2.orgChild3s.length == 0
|
|
? 1
|
|
: orgChild2.orgChild3s.length + 1;
|
|
orgChild3.orgRootId = orgRoot.id;
|
|
orgChild3.orgChild1Id = orgChild1.id;
|
|
orgChild3.orgChild2Id = orgChild2.id;
|
|
orgChild3.orgChild3Name = item.orgChild3;
|
|
orgChild3.orgChild3ShortName = item.orgShortname;
|
|
const rank: any = item.orgRank;
|
|
orgChild3.orgChild3Rank = rank;
|
|
orgChild3.orgChild3RankSub = item.orgSubRank;
|
|
orgChild3.DEPARTMENT_CODE = item.DEPARTMENT_CODE;
|
|
orgChild3.DIVISION_CODE = item.DIVISION_CODE;
|
|
orgChild3.SECTION_CODE = item.SECTION_CODE;
|
|
orgChild3.JOB_CODE = item.JOB_CODE;
|
|
orgChild3.orgRevisionId = orgRevision.id;
|
|
orgChild3.createdUserId = request.user.sub;
|
|
orgChild3.createdFullName = request.user.name;
|
|
orgChild3.lastUpdateUserId = request.user.sub;
|
|
orgChild3.lastUpdateFullName = request.user.name;
|
|
orgChild3.createdAt = new Date();
|
|
orgChild3.lastUpdatedAt = new Date();
|
|
await this.orgChild3Repo.save(orgChild3);
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
/**
|
|
* @summary ทะเบียนประวัติ ข้าราชการ
|
|
*/
|
|
@Post("mapposition-Officer")
|
|
async MapPositionOfficer(@Request() request: { user: Record<string, any> }) {
|
|
const officer = await AppDataSource.getRepository(Profile)
|
|
.createQueryBuilder("profile")
|
|
.leftJoinAndSelect("profile.next_holders", "posMaster")
|
|
// .where({citizenId: "1720700018869"})
|
|
.where("posMaster.id IS NULL")
|
|
.getMany();
|
|
let rowCount = 0;
|
|
let _null: any = null;
|
|
let type_: any = null;
|
|
let level_: any = null;
|
|
const orgRevision = await this.orgRevisionRepo.findOne({
|
|
// where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false },
|
|
where: { id: "30e594c9-a65b-485e-a4c5-71aa497e6b8a" },
|
|
});
|
|
if (orgRevision == null) return new HttpSuccess();
|
|
for await (const _item of officer) {
|
|
rowCount++;
|
|
console.log(rowCount);
|
|
const item = await AppDataSource.getRepository(OFFICER)
|
|
.createQueryBuilder("OFFICER")
|
|
.where({ CIT: _item.citizenId })
|
|
.getOne();
|
|
|
|
if (item == null) {
|
|
continue;
|
|
}
|
|
let posMaster = new PosMaster();
|
|
let orgRoot = (await this.orgRootRepo.findOne({
|
|
where: {
|
|
DEPARTMENT_CODE: item.DEPARTMENT_CODE,
|
|
DIVISION_CODE: item.DIVISION_CODE,
|
|
SECTION_CODE: item.SECTION_CODE,
|
|
JOB_CODE: item.JOB_CODE,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
})) as OrgRoot;
|
|
if (orgRoot != null) {
|
|
posMaster.orgRootId = orgRoot.id ?? _null;
|
|
} else {
|
|
let orgChild1 = await this.orgChild1Repo.findOne({
|
|
where: {
|
|
DEPARTMENT_CODE: item.DEPARTMENT_CODE,
|
|
DIVISION_CODE: item.DIVISION_CODE,
|
|
SECTION_CODE: item.SECTION_CODE,
|
|
JOB_CODE: item.JOB_CODE,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
});
|
|
if (orgChild1 != null) {
|
|
posMaster.orgRootId = orgChild1.orgRootId ?? _null;
|
|
posMaster.orgChild1Id = orgChild1.id ?? _null;
|
|
} else {
|
|
let orgChild2 = await this.orgChild2Repo.findOne({
|
|
where: {
|
|
DEPARTMENT_CODE: item.DEPARTMENT_CODE,
|
|
DIVISION_CODE: item.DIVISION_CODE,
|
|
SECTION_CODE: item.SECTION_CODE,
|
|
JOB_CODE: item.JOB_CODE,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
});
|
|
if (orgChild2 != null) {
|
|
posMaster.orgRootId = orgChild2.orgRootId ?? _null;
|
|
posMaster.orgChild1Id = orgChild2.orgChild1Id ?? _null;
|
|
posMaster.orgChild2Id = orgChild2.id ?? _null;
|
|
} else {
|
|
let orgChild3 = await this.orgChild3Repo.findOne({
|
|
where: {
|
|
DEPARTMENT_CODE: item.DEPARTMENT_CODE,
|
|
DIVISION_CODE: item.DIVISION_CODE,
|
|
SECTION_CODE: item.SECTION_CODE,
|
|
JOB_CODE: item.JOB_CODE,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
});
|
|
if (orgChild3 != null) {
|
|
posMaster.orgRootId = orgChild3.orgRootId ?? _null;
|
|
posMaster.orgChild1Id = orgChild3.orgChild1Id ?? _null;
|
|
posMaster.orgChild2Id = orgChild3.orgChild2Id ?? _null;
|
|
posMaster.orgChild3Id = orgChild3.id ?? _null;
|
|
} else {
|
|
let orgChild4 = await this.orgChild4Repo.findOne({
|
|
where: {
|
|
DEPARTMENT_CODE: item.DEPARTMENT_CODE,
|
|
DIVISION_CODE: item.DIVISION_CODE,
|
|
SECTION_CODE: item.SECTION_CODE,
|
|
JOB_CODE: item.JOB_CODE,
|
|
orgRevisionId: orgRevision.id,
|
|
},
|
|
});
|
|
if (orgChild4 != null) {
|
|
posMaster.orgRootId = orgChild4.id ?? _null;
|
|
posMaster.orgChild1Id = orgChild4.id ?? _null;
|
|
posMaster.orgChild2Id = orgChild4.id ?? _null;
|
|
posMaster.orgChild3Id = orgChild4.id ?? _null;
|
|
posMaster.orgChild4Id = orgChild4.id ?? _null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
posMaster.statusReport = "PENDING";
|
|
posMaster.isCondition = false;
|
|
posMaster.isStaff = false;
|
|
posMaster.isDirector = false;
|
|
posMaster.isSit = false;
|
|
posMaster.next_holderId = _item.id;
|
|
posMaster.posMasterNo =
|
|
item.POS_NUM_CODE == "" || item.POS_NUM_CODE == null ? _null : Number(item.POS_NUM_CODE);
|
|
posMaster.orgRevisionId = orgRevision.id;
|
|
posMaster.posMasterCreatedAt = new Date();
|
|
posMaster.createdUserId = request.user.sub;
|
|
posMaster.createdFullName = request.user.name;
|
|
posMaster.lastUpdateUserId = request.user.sub;
|
|
posMaster.lastUpdateFullName = request.user.name;
|
|
posMaster.createdAt = new Date();
|
|
posMaster.lastUpdatedAt = new Date();
|
|
await this.posMasterRepo.save(posMaster);
|
|
posMaster.ancestorDNA = posMaster.id;
|
|
await this.posMasterRepo.save(posMaster);
|
|
|
|
let position = new Position();
|
|
if (item.MP_CATEGORY) {
|
|
type_ = await this.posTypeRepo.findOne({
|
|
where: { posTypeName: item.MP_CATEGORY },
|
|
});
|
|
}
|
|
if (item.MP_LEVEL) {
|
|
if (type_ == null) {
|
|
level_ = await this.posLevelRepo.findOne({
|
|
where: {
|
|
posLevelName: item.MP_LEVEL,
|
|
},
|
|
});
|
|
} else {
|
|
level_ = await this.posLevelRepo.findOne({
|
|
where: {
|
|
posLevelName: item.MP_LEVEL,
|
|
posTypeId: type_.id,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
position.posMasterId = posMaster.id;
|
|
position.isSpecial = false;
|
|
position.positionIsSelected = true;
|
|
position.createdUserId = request.user.sub;
|
|
position.createdFullName = request.user.name;
|
|
position.lastUpdateUserId = request.user.sub;
|
|
position.lastUpdateFullName = request.user.name;
|
|
position.createdAt = new Date();
|
|
position.lastUpdatedAt = new Date();
|
|
|
|
const posExecutive = await this.posExecutiveRepo.findOne({
|
|
where: {
|
|
posExecutiveName: item.ADMIN_NAME,
|
|
},
|
|
});
|
|
if (posExecutive == null && item.ADMIN_NAME != "" && item.ADMIN_NAME != null) {
|
|
const posExecutiveOrder = await this.posExecutiveRepo.findOne({
|
|
where: { posExecutivePriority: Not(IsNull()) },
|
|
order: { posExecutivePriority: "DESC" },
|
|
});
|
|
let posExecutive = new PosExecutive();
|
|
|
|
posExecutive.posExecutivePriority =
|
|
posExecutiveOrder == null ? _null : posExecutiveOrder.posExecutivePriority + 1;
|
|
posExecutive.posExecutiveName = item.ADMIN_NAME;
|
|
posExecutive.createdUserId = request.user.sub;
|
|
posExecutive.createdFullName = request.user.name;
|
|
posExecutive.lastUpdateUserId = request.user.sub;
|
|
posExecutive.lastUpdateFullName = request.user.name;
|
|
posExecutive.createdAt = new Date();
|
|
posExecutive.lastUpdatedAt = new Date();
|
|
await this.posExecutiveRepo.save(posExecutive);
|
|
}
|
|
position.posExecutiveId = posExecutive == null ? _null : posExecutive.id;
|
|
position.positionName = item.WORK_LINE_NAME == "" ? _null : item.WORK_LINE_NAME;
|
|
position.posTypeId =
|
|
type_ != null && type_.posTypeName == item.MP_CATEGORY && type_ ? type_.id : null;
|
|
position.posLevelId =
|
|
level_ != null && level_.posLevelName == item.MP_LEVEL && level_ ? level_.id : null;
|
|
await this.positionRepo.save(position);
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ข้าราชการ
|
|
*/
|
|
@Post("uploadProfileSalary-OfficerEntry")
|
|
async UploadFileSQLSalaryEntry(@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(0)
|
|
// // .take(1000)
|
|
// .getManyAndCount();
|
|
const profiles = await this.profileRepo.find({
|
|
where: { profileSalary: { isEntry: Not(true) } },
|
|
order: {
|
|
citizenId: "ASC",
|
|
},
|
|
select: ["citizenId", "id"],
|
|
});
|
|
// const filePath = path.join(__dirname, "salaryProfile1.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","refId","isEntry"\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) => {
|
|
for await (const _item of profiles) {
|
|
const existingProfile = await this.ProfileSalariesRepo.find({
|
|
where: { posNo: _item.citizenId },
|
|
order: {
|
|
Order: "ASC",
|
|
},
|
|
});
|
|
let order = 1;
|
|
// await Promise.all(
|
|
// existingProfile.map(async (item) => {
|
|
for await (const item of existingProfile) {
|
|
rowCount++;
|
|
const profileSalary: any = new ProfileSalary();
|
|
profileSalary.profileId = _item.id;
|
|
profileSalary.order = item.Order;
|
|
|
|
profileSalary.commandDateAffect =
|
|
item.Date == null
|
|
? _null
|
|
: new Date(item.Date.setDate(item.Date.getDate() + 1))
|
|
.toISOString()
|
|
.replace("T", " ")
|
|
.substring(0, 19);
|
|
profileSalary.remark = `${item.SalaryRef} ${item.PositionName}`;
|
|
profileSalary.amount = item.Amount;
|
|
profileSalary.positionSalaryAmount = item.PositionSalaryAmount;
|
|
// const str = item.PosNoName;
|
|
// const parts = str.split(" ");
|
|
// if (parts.length > 1) {
|
|
// const posNo = parts.at(-1);
|
|
// const posNoAbb = parts.slice(0, -1).join(" ");
|
|
// profileSalary.posNoAbb = posNoAbb;
|
|
// profileSalary.posNo = posNo;
|
|
// }
|
|
profileSalary.posNo = item.PosNoName;
|
|
profileSalary.positionLevel = item.PositionLevelName;
|
|
profileSalary.positionCee = this.canConvertToInt(item.PositionLevelName)
|
|
? item.PositionLevelName
|
|
: _null;
|
|
profileSalary.positionType = item.PositionTypeName;
|
|
profileSalary.isEntry = true;
|
|
|
|
profileSalary.createdUserId = request.user.sub;
|
|
profileSalary.createdFullName = request.user.name;
|
|
profileSalary.lastUpdateUserId = request.user.sub;
|
|
profileSalary.lastUpdateFullName = request.user.name;
|
|
profileSalary.createdAt = new Date().toISOString().split("T")[0];
|
|
profileSalary.lastUpdatedAt = new Date().toISOString().split("T")[0];
|
|
// const result = uuidv7();
|
|
// profileSalary.id = result;
|
|
|
|
await this.salaryRepo.save(profileSalary);
|
|
// console.log(profileSalary.commandDateSign);
|
|
// csvData = `"${profileSalary.id || "NULL"}","${profileSalary.createdAt || "NULL"}","${profileSalary.createdUserId || "NULL"}","${profileSalary.lastUpdatedAt || "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 || "NULL"}","${profileSalary.commandDateAffect || "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 || "NULL"}","${profileSalary.isGovernment || "NULL"}","${profileSalary.commandId || "NULL"}","${profileSalary.refId || "NULL"}","${profileSalary.isEntry || "NULL"}"\n`;
|
|
|
|
// 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);
|
|
// }
|
|
// });
|
|
}
|
|
order = 1;
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
canConvertToInt(str: string) {
|
|
try {
|
|
const num = Number(str);
|
|
return Number.isInteger(num);
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ข้าราชการ
|
|
*/
|
|
@Post("mark-director")
|
|
async UpdateMarkDirector(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
const posMaster = await this.posMasterRepo.find({
|
|
where: { positions: { posExecutiveId: Not(IsNull()) } },
|
|
});
|
|
|
|
for await (const _item of posMaster) {
|
|
rowCount++;
|
|
_item.isDirector = true;
|
|
await this.posMasterRepo.save(_item);
|
|
console.log(rowCount);
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ข้าราชการ
|
|
*/
|
|
@Post("update-amount")
|
|
async UpdateAmount(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
const profile: any = await this.profileRepo.find({ where: { amount: LessThanOrEqual(0) } });
|
|
|
|
for await (const _item of profile) {
|
|
const OFFICER = await this.OFFICERRepo.findOne({
|
|
select: ["CIT", "SALARY"],
|
|
where: { CIT: _item.citizenId },
|
|
});
|
|
if (OFFICER) {
|
|
rowCount++;
|
|
_item.amount = Number(OFFICER.SALARY);
|
|
await this.profileRepo.save(_item);
|
|
console.log(rowCount);
|
|
}
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* @summary เงินเดือน ข้าราชการ
|
|
*/
|
|
@Post("update-profileSalary")
|
|
async UpdateProfileSalary(@Request() request: { user: Record<string, any> }) {
|
|
let rowCount = 0;
|
|
const profileSalarys: any = await this.salaryRepo.find({ where: { refId: Not(IsNull()) } });
|
|
|
|
for await (const _item of profileSalarys) {
|
|
const OFFICER = await this.HR_POSITION_OFFICERRepo.findOne({
|
|
select: ["id", "POS_NUM_CODE_SIT", "POS_NUM_CODE_SIT_ABB"],
|
|
where: { id: _item.refId },
|
|
});
|
|
if (OFFICER) {
|
|
rowCount++;
|
|
_item.posNumCodeSit = OFFICER.POS_NUM_CODE_SIT;
|
|
_item.posNumCodeSitAbb = OFFICER.POS_NUM_CODE_SIT_ABB;
|
|
await this.salaryRepo.save(_item);
|
|
console.log(rowCount);
|
|
}
|
|
}
|
|
return new HttpSuccess();
|
|
}
|
|
}
|