Merge branch 'develop' into adiDev

This commit is contained in:
AdisakKanthawilang 2024-11-22 13:44:31 +07:00
commit 219a9ff104
7 changed files with 316 additions and 57 deletions

View file

@ -698,6 +698,23 @@ export class CommandController extends Controller {
commandSend.lastUpdateFullName = request.user.name; commandSend.lastUpdateFullName = request.user.name;
commandSend.lastUpdatedAt = new Date(); commandSend.lastUpdatedAt = new Date();
await this.commandSendRepository.save(commandSend); await this.commandSendRepository.save(commandSend);
if(commandSend && commandSend.id) {
let _ccName = new Array("INBOX", "EMAIL");
let _dataSendCC = new Array();
for(let i=0; i<_ccName.length; i++) {
_dataSendCC.push({
commandSendId: commandSend.id,
name: _ccName[i],
createdUserId: request.user.sub,
createdFullName: request.user.name,
createdAt: new Date(),
lastUpdateUserId: request.user.sub,
lastUpdateFullName: request.user.name,
lastUpdatedAt: new Date(),
});
}
await this.commandSendCCRepository.save(_dataSendCC);
}
}), }),
); );
@ -2172,26 +2189,30 @@ export class CommandController extends Controller {
if (clearProfile) { if (clearProfile) {
if (profile.keycloak != null) { if (profile.keycloak != null) {
const delUserKeycloak = await deleteUser(profile.keycloak); const delUserKeycloak = await deleteUser(profile.keycloak);
if (delUserKeycloak) profile.keycloak = _null; if (delUserKeycloak) {
profile.roleKeycloaks = []; profile.keycloak = _null;
profile.roleKeycloaks = [];
profile.isActive = false;
}
} }
profile.position = _null; profile.position = _null;
profile.posTypeId = _null; profile.posTypeId = _null;
profile.posLevelId = _null; profile.posLevelId = _null;
} }
const returnWork = await checkReturnCommandType(String(item.commandId)); const returnWork = await checkReturnCommandType(String(item.commandId));
//คำสั่งบรรจุกลับเข้ารับราชการ หรือ ผู้ออกไปรับราชการทหารกลับเข้ารับราชการ solutionเดิม ให้ enable user เปลี่ยนเป็นสร้าง user ใหม่เลยเพราะยังไงตอนถูกพักก็ถูกลบ user
if (returnWork && item.isGovernment) { if (returnWork && item.isGovernment) {
if (profile.keycloak != null) { /*if (profile.keycloak != null) {
const enableActive = await enableStatus(profile.keycloak, true); const enableActive = await enableStatus(profile.keycloak, true);
if (!enableActive) throw new Error("Failed. Cannot change enable status."); if (!enableActive) throw new Error("Failed. Cannot change enable status.");
} else { } else {*/
const userKeycloakId = await createUser(profile.citizenId, profile.citizenId, { const userKeycloakId = await createUser(profile.citizenId, profile.citizenId, {
firstName: profile.firstName, firstName: profile.firstName,
lastName: profile.lastName, lastName: profile.lastName,
}); });
if (typeof userKeycloakId !== "string") { // if (typeof userKeycloakId !== "string") {
throw new Error(userKeycloakId.errorMessage); // throw new Error(userKeycloakId.errorMessage);
} // }
const list = await getRoles(); const list = await getRoles();
if (!Array.isArray(list)) if (!Array.isArray(list))
throw new Error("Failed. Cannot get role(s) data from the server."); throw new Error("Failed. Cannot get role(s) data from the server.");
@ -2204,11 +2225,11 @@ export class CommandController extends Controller {
name: x.name, name: x.name,
})), })),
); );
if (!result) throw new Error("Failed. Cannot set user's role."); // if (!result) throw new Error("Failed. Cannot set user's role.");
profile.keycloak = userKeycloakId; profile.keycloak = typeof userKeycloakId === "string" ? userKeycloakId : "";
} /*}*/
profile.isActive = true; profile.isActive = true;
profile.roleKeycloaks = profile.roleKeycloaks ?? [roleKeycloak]; profile.roleKeycloaks = result && roleKeycloak ? [roleKeycloak] : [];
} }
await this.profileRepository.save(profile); await this.profileRepository.save(profile);
}), }),
@ -2297,9 +2318,11 @@ export class CommandController extends Controller {
if (clearProfile) { if (clearProfile) {
if (profile.keycloak != null) { if (profile.keycloak != null) {
const delUserKeycloak = await deleteUser(profile.keycloak); const delUserKeycloak = await deleteUser(profile.keycloak);
if (delUserKeycloak) profile.keycloak = _null; if (delUserKeycloak) {
profile.roleKeycloaks = []; profile.keycloak = _null;
profile.isActive = false; profile.roleKeycloaks = [];
profile.isActive = false;
}
} }
profile.position = _null; profile.position = _null;
profile.posTypeId = _null; profile.posTypeId = _null;
@ -2373,8 +2396,11 @@ export class CommandController extends Controller {
if (clearProfile) { if (clearProfile) {
if (profile.keycloak != null) { if (profile.keycloak != null) {
const delUserKeycloak = await deleteUser(profile.keycloak); const delUserKeycloak = await deleteUser(profile.keycloak);
if (delUserKeycloak) profile.keycloak = _null; if (delUserKeycloak) {
profile.roleKeycloaks = []; profile.keycloak = _null;
profile.roleKeycloaks = [];
profile.isActive = false;
}
} }
profile.position = _null; profile.position = _null;
profile.posTypeId = _null; profile.posTypeId = _null;
@ -2615,17 +2641,27 @@ export class CommandController extends Controller {
const exceptClear = await checkExceptCommandType(String(item.commandId)); const exceptClear = await checkExceptCommandType(String(item.commandId));
if (item.isLeave == true && !exceptClear) { if (item.isLeave == true && !exceptClear) {
await removeProfileInOrganize(_profile.id, "OFFICER"); await removeProfileInOrganize(_profile.id, "OFFICER");
} else if (item.isLeave == true && exceptClear && _profile.keycloak != null) { }
const enableActive = await enableStatus(_profile.keycloak, false); //คำสั่งพักราชการ หรือ ให้ออกจากราชการไว้ก่อน solutionเดิม ให้ disable user ไว้แต่ยังไม่ลบ เปลี่ยนเป็นลบ user ออกเลย
if (!enableActive) throw new Error("Failed. Cannot change enable status."); else if (item.isLeave == true && exceptClear && _profile.keycloak != null) {
_profile.isActive = false; // const enableActive = await enableStatus(_profile.keycloak, false);
// if (!enableActive) throw new Error("Failed. Cannot change enable status.");
const delUserKeycloak = await deleteUser(_profile.keycloak);
if (delUserKeycloak) {
_profile.keycloak = _null;
_profile.roleKeycloaks = [];
_profile.isActive = false;
}
} }
const clearProfile = await checkCommandType(String(item.commandId)); const clearProfile = await checkCommandType(String(item.commandId));
if (clearProfile) { if (clearProfile) {
if (_profile.keycloak != null) { if (_profile.keycloak != null) {
const delUserKeycloak = await deleteUser(_profile.keycloak); const delUserKeycloak = await deleteUser(_profile.keycloak);
if (delUserKeycloak) _profile.keycloak = _null; if (delUserKeycloak) {
_profile.roleKeycloaks = []; _profile.keycloak = _null;
_profile.roleKeycloaks = [];
_profile.isActive = false;
}
} }
_profile.position = _null; _profile.position = _null;
_profile.posTypeId = _null; _profile.posTypeId = _null;
@ -2903,8 +2939,11 @@ export class CommandController extends Controller {
if (clearProfile) { if (clearProfile) {
if (_profile.keycloak != null) { if (_profile.keycloak != null) {
const delUserKeycloak = await deleteUser(_profile.keycloak); const delUserKeycloak = await deleteUser(_profile.keycloak);
if (delUserKeycloak) _profile.keycloak = _null; if (delUserKeycloak) {
_profile.roleKeycloaks = []; _profile.keycloak = _null;
_profile.roleKeycloaks = [];
_profile.isActive = false;
}
} }
_profile.position = _null; _profile.position = _null;
_profile.posTypeId = _null; _profile.posTypeId = _null;
@ -2989,9 +3028,9 @@ export class CommandController extends Controller {
firstName: profile.firstName, firstName: profile.firstName,
lastName: profile.lastName, lastName: profile.lastName,
}); });
if (typeof userKeycloakId !== "string") { // if (typeof userKeycloakId !== "string") {
throw new Error(userKeycloakId.errorMessage); // throw new Error(userKeycloakId.errorMessage);
} // }
const list = await getRoles(); const list = await getRoles();
if (!Array.isArray(list)) if (!Array.isArray(list))
throw new Error("Failed. Cannot get role(s) data from the server."); throw new Error("Failed. Cannot get role(s) data from the server.");
@ -3004,9 +3043,9 @@ export class CommandController extends Controller {
name: x.name, name: x.name,
})), })),
); );
if (!result) throw new Error("Failed. Cannot set user's role."); // if (!result) throw new Error("Failed. Cannot set user's role.");
profile.keycloak = userKeycloakId; profile.keycloak = typeof userKeycloakId === "string" ? userKeycloakId : "";
profile.roleKeycloaks = roleKeycloak ? [roleKeycloak] : []; profile.roleKeycloaks = result && roleKeycloak ? [roleKeycloak] : [];
profile.email = item.bodyProfile.email; profile.email = item.bodyProfile.email;
profile.dateStart = item.bodyProfile.dateStart; profile.dateStart = item.bodyProfile.dateStart;
await this.profileRepository.save(profile); await this.profileRepository.save(profile);
@ -3322,9 +3361,9 @@ export class CommandController extends Controller {
lastName: profile.lastName, lastName: profile.lastName,
// email: profile.email, // email: profile.email,
}); });
if (typeof userKeycloakId !== "string") { // if (typeof userKeycloakId !== "string") {
throw new Error(userKeycloakId.errorMessage); // throw new Error(userKeycloakId.errorMessage);
} // }
const list = await getRoles(); const list = await getRoles();
if (!Array.isArray(list)) if (!Array.isArray(list))
throw new Error("Failed. Cannot get role(s) data from the server."); throw new Error("Failed. Cannot get role(s) data from the server.");
@ -3337,9 +3376,9 @@ export class CommandController extends Controller {
name: x.name, name: x.name,
})), })),
); );
if (!result) throw new Error("Failed. Cannot set user's role."); // if (!result) throw new Error("Failed. Cannot set user's role.");
profile.keycloak = userKeycloakId; profile.keycloak = typeof userKeycloakId == "string" ? userKeycloakId : "";
profile.roleKeycloaks = roleKeycloak ? [roleKeycloak] : []; profile.roleKeycloaks = result && roleKeycloak ? [roleKeycloak] : [];
// End Create Keycloak // End Create Keycloak
positionNew.positionIsSelected = true; positionNew.positionIsSelected = true;

View file

@ -127,8 +127,19 @@ export class ImportDataController extends Controller {
let dateRetire = new Date(item["BORN"]); let dateRetire = new Date(item["BORN"]);
profile.citizenId = item["ID"] == "" ? "" : item["ID"]; 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.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.firstName = item["FNAME"] == "" ? null : item["FNAME"];
profile.lastName = item["LNAME"] == "" ? null : item["LNAME"]; profile.lastName = item["LNAME"] == "" ? null : item["LNAME"];
profile.gender = item["SEX"] == "1" ? "ชาย" : item["SEX"] == "2" ? "หญิง" : null_; 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.citizenId = item["ID"] == "" ? "" : item["ID"];
profileEmp.employeeClass = profileEmp.employeeClass =
item["FLAG_PERSON_TYPE"] == "6" ? "PERM" : item["FLAG_PERSON_TYPE"] == "7" ? "TEMP" : ""; 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.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.firstName = item["FNAME"] == "" ? null : item["FNAME"];
profileEmp.lastName = item["LNAME"] == "" ? null : item["LNAME"]; profileEmp.lastName = item["LNAME"] == "" ? null : item["LNAME"];
profileEmp.gender = item["SEX"] == "1" ? "ชาย" : item["SEX"] == "2" ? "หญิง" : null_; profileEmp.gender = item["SEX"] == "1" ? "ชาย" : item["SEX"] == "2" ? "หญิง" : null_;

View file

@ -70,8 +70,6 @@ import { ProfileFamilyCoupleHistory } from "../entities/ProfileFamilyCoupleHisto
import { viewDirector } from "../entities/view/viewDirector"; import { viewDirector } from "../entities/view/viewDirector";
import { viewDirectorActing } from "../entities/view/viewDirectorActing"; import { viewDirectorActing } from "../entities/view/viewDirectorActing";
import CallAPI from "../interfaces/call-api"; import CallAPI from "../interfaces/call-api";
import { log } from "console";
import { Subject } from "typeorm/persistence/Subject.js";
@Route("api/v1/org/profile") @Route("api/v1/org/profile")
@Tags("Profile") @Tags("Profile")
@Security("bearerAuth") @Security("bearerAuth")
@ -1734,6 +1732,33 @@ export class ProfileController extends Controller {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลระดับตำแหน่งนี้"); 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 }))) { if (body.posTypeId && !(await this.posTypeRepo.findOneBy({ id: body.posTypeId }))) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้");
} }
@ -1781,6 +1806,8 @@ export class ProfileController extends Controller {
// } // }
const profile = Object.assign(new Profile(), body); const profile = Object.assign(new Profile(), body);
profile.prefixMain = profile.prefix;
profile.prefix = profile.rank ?? profile.prefixMain;
profile.isProbation = false; profile.isProbation = false;
profile.isLeave = false; profile.isLeave = false;
profile.createdUserId = request.user.sub; profile.createdUserId = request.user.sub;
@ -1823,8 +1850,37 @@ export class ProfileController extends Controller {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); 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 profile: Profile = Object.assign(new Profile(), body);
const _null: any = null; const _null: any = null;
profile.prefixMain = profile.prefix;
profile.prefix = profile.rank ?? profile.prefixMain;
profile.dateRetire = body.birthDate == null ? _null : calculateRetireDate(body.birthDate); profile.dateRetire = body.birthDate == null ? _null : calculateRetireDate(body.birthDate);
profile.dateRetireLaw = body.birthDate == null ? _null : calculateRetireLaw(body.birthDate); profile.dateRetireLaw = body.birthDate == null ? _null : calculateRetireLaw(body.birthDate);
profile.createdUserId = request.user.sub; profile.createdUserId = request.user.sub;
@ -1864,7 +1920,36 @@ export class ProfileController extends Controller {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); 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 profile: Profile = Object.assign(new Profile(), body);
profile.prefixMain = profile.prefix;
profile.prefix = profile.rank ?? profile.prefixMain;
profile.createdUserId = request.user.sub; profile.createdUserId = request.user.sub;
profile.createdFullName = request.user.name; profile.createdFullName = request.user.name;
profile.lastUpdateUserId = request.user.sub; profile.lastUpdateUserId = request.user.sub;
@ -1880,15 +1965,19 @@ export class ProfileController extends Controller {
@Body() @Body()
body: { body: {
profileId: string; profileId: string;
email: string; email: string;
subject: string; subject: string;
} },
) { ) {
const jwt = require('jsonwebtoken'); const jwt = require("jsonwebtoken");
const token = jwt.sign({email_id: body.email, profileId: body.profileId}, process.env.AUTH_ACCOUNT_SECRET, {expiresIn: '15m'}); const token = jwt.sign(
// console.log("[token]",token); { email_id: body.email, profileId: body.profileId },
const link = process.env.URL + "/verifyemail?upn=" + token; process.env.AUTH_ACCOUNT_SECRET,
// console.log("[link]",link); { expiresIn: "15m" },
);
// console.log("[token]",token);
const link = process.env.URL + "/verifyemail?upn=" + token;
// console.log("[link]",link);
await new CallAPI() await new CallAPI()
.PostData(req, "/placement/noti/send-mail", { .PostData(req, "/placement/noti/send-mail", {
@ -3172,6 +3261,8 @@ export class ProfileController extends Controller {
}); });
Object.assign(record, body); Object.assign(record, body);
record.prefixMain = record.prefix;
record.prefix = record.rank ?? record.prefixMain;
record.createdUserId = request.user.sub; record.createdUserId = request.user.sub;
record.createdFullName = request.user.name; record.createdFullName = request.user.name;
record.createdAt = new Date(); record.createdAt = new Date();
@ -3418,13 +3509,10 @@ export class ProfileController extends Controller {
} else if (chkDigit === 11) { } else if (chkDigit === 11) {
chkDigit = chkDigit % 10; chkDigit = chkDigit % 10;
} }
// else if(chkDigit === 11){
// chkDigit = cal % 10;
// }
// if (citizenIdDigits[12] !== chkDigit) { if (citizenIdDigits[12] !== chkDigit) {
// throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง"); throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
// } }
} }
const record = await this.profileRepo.findOneBy({ id }); const record = await this.profileRepo.findOneBy({ id });
const before = structuredClone(record); const before = structuredClone(record);
@ -3432,6 +3520,8 @@ export class ProfileController extends Controller {
if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้"); if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้");
Object.assign(record, body); Object.assign(record, body);
record.prefixMain = record.prefix;
record.prefix = record.rank ?? record.prefixMain;
record.createdUserId = request.user.sub; record.createdUserId = request.user.sub;
record.createdFullName = request.user.name; record.createdFullName = request.user.name;
record.createdAt = new Date(); record.createdAt = new Date();
@ -7779,6 +7869,8 @@ export class ProfileController extends Controller {
profile.registrationSubDistrictId = _null; profile.registrationSubDistrictId = _null;
} }
profile.prefixMain = profile.prefix;
profile.prefix = profile.rank ?? profile.prefixMain;
profile.createdUserId = request.user.sub; profile.createdUserId = request.user.sub;
profile.createdFullName = request.user.name; profile.createdFullName = request.user.name;
profile.lastUpdateUserId = request.user.sub; profile.lastUpdateUserId = request.user.sub;

View file

@ -794,6 +794,33 @@ export class ProfileEmployeeController extends Controller {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); 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 == "") { if (body.employeeClass == null || body.employeeClass == undefined || body.employeeClass == "") {
body.employeeClass = "PERM"; body.employeeClass = "PERM";
} }
@ -802,6 +829,8 @@ export class ProfileEmployeeController extends Controller {
} }
const profile = Object.assign(new ProfileEmployee(), body); const profile = Object.assign(new ProfileEmployee(), body);
profile.prefixMain = profile.prefix;
profile.prefix = profile.rank ?? profile.prefixMain;
profile.createdUserId = request.user.sub; profile.createdUserId = request.user.sub;
profile.createdFullName = request.user.name; profile.createdFullName = request.user.name;
profile.lastUpdateUserId = request.user.sub; profile.lastUpdateUserId = request.user.sub;
@ -830,7 +859,10 @@ export class ProfileEmployeeController extends Controller {
@Path() id: string, @Path() id: string,
@Body() body: UpdateProfileEmployee, @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 = const exists =
!!body.citizenId && !!body.citizenId &&
(await this.profileRepo.findOne({ (await this.profileRepo.findOne({
@ -856,6 +888,33 @@ export class ProfileEmployeeController extends Controller {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประเภทตำแหน่งนี้"); 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 }); const record = await this.profileRepo.findOneBy({ id });
if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้"); if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้");
@ -867,6 +926,8 @@ export class ProfileEmployeeController extends Controller {
} }
Object.assign(record, body); Object.assign(record, body);
record.prefixMain = record.prefix;
record.prefix = record.rank ?? record.prefixMain;
record.createdUserId = request.user.sub; record.createdUserId = request.user.sub;
record.createdFullName = request.user.name; record.createdFullName = request.user.name;
record.createdAt = new Date(); record.createdAt = new Date();

View file

@ -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 { EntityBase } from "./base/Base";
import { PosMaster } from "./PosMaster"; import { PosMaster } from "./PosMaster";
import { PosLevel } from "./PosLevel"; import { PosLevel } from "./PosLevel";
@ -69,6 +78,14 @@ export class Profile extends EntityBase {
}) })
prefix: string; prefix: string;
@Column({
nullable: true,
comment: "คำนำหน้าชื่อตัวหลัก",
length: 40,
default: null,
})
prefixMain: string;
@Column({ @Column({
nullable: true, nullable: true,
comment: "ชื่อ", comment: "ชื่อ",

View file

@ -114,6 +114,14 @@ export class ProfileEmployee extends EntityBase {
}) })
prefix: string; prefix: string;
@Column({
nullable: true,
comment: "คำนำหน้าชื่อตัวหลัก",
length: 40,
default: null,
})
prefixMain: string;
@Column({ @Column({
nullable: true, nullable: true,
comment: "ชื่อ", comment: "ชื่อ",

View file

@ -0,0 +1,20 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdataProfileAddPrefixmain1732252198299 implements MigrationInterface {
name = 'UpdataProfileAddPrefixmain1732252198299'
public async up(queryRunner: QueryRunner): Promise<void> {
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<void> {
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\``);
}
}