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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }, ) { 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 }) { 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 }) { 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 }, ) { 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 }, ) { 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 }, ) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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 }) { 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(); } }