diff --git a/src/controllers/ImportDataController.ts b/src/controllers/ImportDataController.ts index 45eef18f..aed3e543 100644 --- a/src/controllers/ImportDataController.ts +++ b/src/controllers/ImportDataController.ts @@ -127,8 +127,19 @@ export class ImportDataController extends Controller { let dateRetire = new Date(item["BORN"]); profile.citizenId = item["ID"] == "" ? "" : item["ID"]; - profile.rank = item["RANK_NAME"] == "" ? null : item["RANK_NAME"]; + 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_; @@ -209,8 +220,19 @@ export class ImportDataController extends Controller { 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"] == "" ? null : item["RANK_NAME"]; + 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_; diff --git a/src/controllers/ProfileController.ts b/src/controllers/ProfileController.ts index 0752fb01..2345c3ba 100644 --- a/src/controllers/ProfileController.ts +++ b/src/controllers/ProfileController.ts @@ -70,8 +70,6 @@ import { ProfileFamilyCoupleHistory } from "../entities/ProfileFamilyCoupleHisto import { viewDirector } from "../entities/view/viewDirector"; import { viewDirectorActing } from "../entities/view/viewDirectorActing"; import CallAPI from "../interfaces/call-api"; -import { log } from "console"; -import { Subject } from "typeorm/persistence/Subject.js"; @Route("api/v1/org/profile") @Tags("Profile") @Security("bearerAuth") @@ -1734,6 +1732,33 @@ export class ProfileController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลระดับตำแหน่งนี้"); } + if (body.citizenId) { + const citizenIdDigits = body.citizenId.toString().split("").map(Number); + const cal = + citizenIdDigits[0] * 13 + + citizenIdDigits[1] * 12 + + citizenIdDigits[2] * 11 + + citizenIdDigits[3] * 10 + + citizenIdDigits[4] * 9 + + citizenIdDigits[5] * 8 + + citizenIdDigits[6] * 7 + + citizenIdDigits[7] * 6 + + citizenIdDigits[8] * 5 + + citizenIdDigits[9] * 4 + + citizenIdDigits[10] * 3 + + citizenIdDigits[11] * 2; + const calStp2 = cal % 11; + let chkDigit = 11 - calStp2; + if (chkDigit === 10) { + chkDigit = 1; + } else if (chkDigit === 11) { + chkDigit = chkDigit % 10; + } + + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } + } if (body.posTypeId && !(await this.posTypeRepo.findOneBy({ id: body.posTypeId }))) { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); } @@ -1781,6 +1806,8 @@ export class ProfileController extends Controller { // } const profile = Object.assign(new Profile(), body); + profile.prefixMain = profile.prefix; + profile.prefix = profile.rank ?? profile.prefixMain; profile.isProbation = false; profile.isLeave = false; profile.createdUserId = request.user.sub; @@ -1823,8 +1850,37 @@ export class ProfileController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); } + if (body.citizenId) { + const citizenIdDigits = body.citizenId.toString().split("").map(Number); + const cal = + citizenIdDigits[0] * 13 + + citizenIdDigits[1] * 12 + + citizenIdDigits[2] * 11 + + citizenIdDigits[3] * 10 + + citizenIdDigits[4] * 9 + + citizenIdDigits[5] * 8 + + citizenIdDigits[6] * 7 + + citizenIdDigits[7] * 6 + + citizenIdDigits[8] * 5 + + citizenIdDigits[9] * 4 + + citizenIdDigits[10] * 3 + + citizenIdDigits[11] * 2; + const calStp2 = cal % 11; + let chkDigit = 11 - calStp2; + if (chkDigit === 10) { + chkDigit = 1; + } else if (chkDigit === 11) { + chkDigit = chkDigit % 10; + } + + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } + } const profile: Profile = Object.assign(new Profile(), body); const _null: any = null; + profile.prefixMain = profile.prefix; + profile.prefix = profile.rank ?? profile.prefixMain; profile.dateRetire = body.birthDate == null ? _null : calculateRetireDate(body.birthDate); profile.dateRetireLaw = body.birthDate == null ? _null : calculateRetireLaw(body.birthDate); profile.createdUserId = request.user.sub; @@ -1864,7 +1920,36 @@ export class ProfileController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); } + if (body.citizenId) { + const citizenIdDigits = body.citizenId.toString().split("").map(Number); + const cal = + citizenIdDigits[0] * 13 + + citizenIdDigits[1] * 12 + + citizenIdDigits[2] * 11 + + citizenIdDigits[3] * 10 + + citizenIdDigits[4] * 9 + + citizenIdDigits[5] * 8 + + citizenIdDigits[6] * 7 + + citizenIdDigits[7] * 6 + + citizenIdDigits[8] * 5 + + citizenIdDigits[9] * 4 + + citizenIdDigits[10] * 3 + + citizenIdDigits[11] * 2; + const calStp2 = cal % 11; + let chkDigit = 11 - calStp2; + if (chkDigit === 10) { + chkDigit = 1; + } else if (chkDigit === 11) { + chkDigit = chkDigit % 10; + } + + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } + } const profile: Profile = Object.assign(new Profile(), body); + profile.prefixMain = profile.prefix; + profile.prefix = profile.rank ?? profile.prefixMain; profile.createdUserId = request.user.sub; profile.createdFullName = request.user.name; profile.lastUpdateUserId = request.user.sub; @@ -1880,15 +1965,19 @@ export class ProfileController extends Controller { @Body() body: { profileId: string; - email: string; - subject: string; - } - ) { - const jwt = require('jsonwebtoken'); - const token = jwt.sign({email_id: body.email, profileId: body.profileId}, process.env.AUTH_ACCOUNT_SECRET, {expiresIn: '15m'}); - // console.log("[token]",token); - const link = process.env.URL + "/verifyemail?upn=" + token; - // console.log("[link]",link); + email: string; + subject: string; + }, + ) { + const jwt = require("jsonwebtoken"); + const token = jwt.sign( + { email_id: body.email, profileId: body.profileId }, + process.env.AUTH_ACCOUNT_SECRET, + { expiresIn: "15m" }, + ); + // console.log("[token]",token); + const link = process.env.URL + "/verifyemail?upn=" + token; + // console.log("[link]",link); await new CallAPI() .PostData(req, "/placement/noti/send-mail", { @@ -3172,6 +3261,8 @@ export class ProfileController extends Controller { }); Object.assign(record, body); + record.prefixMain = record.prefix; + record.prefix = record.rank ?? record.prefixMain; record.createdUserId = request.user.sub; record.createdFullName = request.user.name; record.createdAt = new Date(); @@ -3418,13 +3509,10 @@ export class ProfileController extends Controller { } else if (chkDigit === 11) { chkDigit = chkDigit % 10; } - // else if(chkDigit === 11){ - // chkDigit = cal % 10; - // } - // if (citizenIdDigits[12] !== chkDigit) { - // throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); - // } + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } } const record = await this.profileRepo.findOneBy({ id }); const before = structuredClone(record); @@ -3432,6 +3520,8 @@ export class ProfileController extends Controller { if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้"); Object.assign(record, body); + record.prefixMain = record.prefix; + record.prefix = record.rank ?? record.prefixMain; record.createdUserId = request.user.sub; record.createdFullName = request.user.name; record.createdAt = new Date(); @@ -7779,6 +7869,8 @@ export class ProfileController extends Controller { profile.registrationSubDistrictId = _null; } + profile.prefixMain = profile.prefix; + profile.prefix = profile.rank ?? profile.prefixMain; profile.createdUserId = request.user.sub; profile.createdFullName = request.user.name; profile.lastUpdateUserId = request.user.sub; diff --git a/src/controllers/ProfileEmployeeController.ts b/src/controllers/ProfileEmployeeController.ts index 001ae53a..9611c8c9 100644 --- a/src/controllers/ProfileEmployeeController.ts +++ b/src/controllers/ProfileEmployeeController.ts @@ -794,6 +794,33 @@ export class ProfileEmployeeController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); } + if (body.citizenId) { + const citizenIdDigits = body.citizenId.toString().split("").map(Number); + const cal = + citizenIdDigits[0] * 13 + + citizenIdDigits[1] * 12 + + citizenIdDigits[2] * 11 + + citizenIdDigits[3] * 10 + + citizenIdDigits[4] * 9 + + citizenIdDigits[5] * 8 + + citizenIdDigits[6] * 7 + + citizenIdDigits[7] * 6 + + citizenIdDigits[8] * 5 + + citizenIdDigits[9] * 4 + + citizenIdDigits[10] * 3 + + citizenIdDigits[11] * 2; + const calStp2 = cal % 11; + let chkDigit = 11 - calStp2; + if (chkDigit === 10) { + chkDigit = 1; + } else if (chkDigit === 11) { + chkDigit = chkDigit % 10; + } + + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } + } if (body.employeeClass == null || body.employeeClass == undefined || body.employeeClass == "") { body.employeeClass = "PERM"; } @@ -802,6 +829,8 @@ export class ProfileEmployeeController extends Controller { } const profile = Object.assign(new ProfileEmployee(), body); + profile.prefixMain = profile.prefix; + profile.prefix = profile.rank ?? profile.prefixMain; profile.createdUserId = request.user.sub; profile.createdFullName = request.user.name; profile.lastUpdateUserId = request.user.sub; @@ -830,7 +859,10 @@ export class ProfileEmployeeController extends Controller { @Path() id: string, @Body() body: UpdateProfileEmployee, ) { - await new permission().PermissionOrgUserUpdate(request, "SYS_REGISTRY_EMP", id); + const _record = await this.profileRepo.findOneBy({ id: id }); + if (_record) { + await new permission().PermissionOrgUserUpdate(request, "SYS_REGISTRY_EMP", _record.id); + } const exists = !!body.citizenId && (await this.profileRepo.findOne({ @@ -856,6 +888,33 @@ export class ProfileEmployeeController extends Controller { throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); } + if (body.citizenId) { + const citizenIdDigits = body.citizenId.toString().split("").map(Number); + const cal = + citizenIdDigits[0] * 13 + + citizenIdDigits[1] * 12 + + citizenIdDigits[2] * 11 + + citizenIdDigits[3] * 10 + + citizenIdDigits[4] * 9 + + citizenIdDigits[5] * 8 + + citizenIdDigits[6] * 7 + + citizenIdDigits[7] * 6 + + citizenIdDigits[8] * 5 + + citizenIdDigits[9] * 4 + + citizenIdDigits[10] * 3 + + citizenIdDigits[11] * 2; + const calStp2 = cal % 11; + let chkDigit = 11 - calStp2; + if (chkDigit === 10) { + chkDigit = 1; + } else if (chkDigit === 11) { + chkDigit = chkDigit % 10; + } + + if (citizenIdDigits[12] !== chkDigit) { + throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); + } + } const record = await this.profileRepo.findOneBy({ id }); if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้"); @@ -867,6 +926,8 @@ export class ProfileEmployeeController extends Controller { } Object.assign(record, body); + record.prefixMain = record.prefix; + record.prefix = record.rank ?? record.prefixMain; record.createdUserId = request.user.sub; record.createdFullName = request.user.name; record.createdAt = new Date(); diff --git a/src/entities/Profile.ts b/src/entities/Profile.ts index bff07fcd..06609028 100644 --- a/src/entities/Profile.ts +++ b/src/entities/Profile.ts @@ -1,4 +1,13 @@ -import { Entity, Column, OneToMany, JoinColumn, ManyToOne, Double, ManyToMany, JoinTable } from "typeorm"; +import { + Entity, + Column, + OneToMany, + JoinColumn, + ManyToOne, + Double, + ManyToMany, + JoinTable, +} from "typeorm"; import { EntityBase } from "./base/Base"; import { PosMaster } from "./PosMaster"; import { PosLevel } from "./PosLevel"; @@ -69,6 +78,14 @@ export class Profile extends EntityBase { }) prefix: string; + @Column({ + nullable: true, + comment: "คำนำหน้าชื่อตัวหลัก", + length: 40, + default: null, + }) + prefixMain: string; + @Column({ nullable: true, comment: "ชื่อ", diff --git a/src/entities/ProfileEmployee.ts b/src/entities/ProfileEmployee.ts index 31bad68c..c492a457 100644 --- a/src/entities/ProfileEmployee.ts +++ b/src/entities/ProfileEmployee.ts @@ -114,6 +114,14 @@ export class ProfileEmployee extends EntityBase { }) prefix: string; + @Column({ + nullable: true, + comment: "คำนำหน้าชื่อตัวหลัก", + length: 40, + default: null, + }) + prefixMain: string; + @Column({ nullable: true, comment: "ชื่อ", diff --git a/src/migration/1732252198299-updata_profile_add_prefixmain.ts b/src/migration/1732252198299-updata_profile_add_prefixmain.ts new file mode 100644 index 00000000..5f831bbf --- /dev/null +++ b/src/migration/1732252198299-updata_profile_add_prefixmain.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdataProfileAddPrefixmain1732252198299 implements MigrationInterface { + name = 'UpdataProfileAddPrefixmain1732252198299' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`profileEmployee\` ADD \`prefixMain\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อตัวหลัก'`); + await queryRunner.query(`ALTER TABLE \`profileEmployeeHistory\` ADD \`prefixMain\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อตัวหลัก'`); + await queryRunner.query(`ALTER TABLE \`profile\` ADD \`prefixMain\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อตัวหลัก'`); + await queryRunner.query(`ALTER TABLE \`profileHistory\` ADD \`prefixMain\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อตัวหลัก'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`profileHistory\` DROP COLUMN \`prefixMain\``); + await queryRunner.query(`ALTER TABLE \`profile\` DROP COLUMN \`prefixMain\``); + await queryRunner.query(`ALTER TABLE \`profileEmployeeHistory\` DROP COLUMN \`prefixMain\``); + await queryRunner.query(`ALTER TABLE \`profileEmployee\` DROP COLUMN \`prefixMain\``); + } + +}