Merge branch 'develop' of github.com:Frappet/hrms-api-org into develop

This commit is contained in:
kittapath 2025-02-17 17:14:49 +07:00
commit e3a4ad4ed7
6 changed files with 168 additions and 70 deletions

View file

@ -122,7 +122,7 @@ export class ImportDataController extends Controller {
// } // }
const existingProfile = await this.profileRepo.findOne({ const existingProfile = await this.profileRepo.findOne({
where: { citizenId: item.ID }, where: { citizenId: item.id.toString() },
}); });
if (existingProfile) { if (existingProfile) {
profile.id = existingProfile.id; profile.id = existingProfile.id;
@ -152,7 +152,7 @@ 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.toString() == "" ? "" : item.id.toString();
profile.rank = profile.rank =
item.RANK_NAME == "" || item.RANK_NAME == "" ||
item.RANK_NAME == "นาย" || item.RANK_NAME == "นาย" ||
@ -1817,7 +1817,7 @@ export class ImportDataController extends Controller {
rowCount++; rowCount++;
const existingProfile = await this.profileRepo.findOne({ const existingProfile = await this.profileRepo.findOne({
where: { citizenId: item.ID }, where: { citizenId: item.id.toString() },
}); });
if (existingProfile == null) { if (existingProfile == null) {
continue; continue;

View file

@ -16,6 +16,7 @@ import { ProfileAssessment } from "../entities/ProfileAssessment";
import { log } from "console"; import { log } from "console";
import { format } from "path"; import { format } from "path";
import { viewProfileEvaluation } from "../entities/view/viewProfileEvaluation"; import { viewProfileEvaluation } from "../entities/view/viewProfileEvaluation";
import { viewProfileEmployeeEvaluation } from "../entities/view/viewProfileEmployeeEvaluation";
@Route("api/v1/org/unauthorize") @Route("api/v1/org/unauthorize")
@Tags("OrganizationUnauthorize") @Tags("OrganizationUnauthorize")
@ -30,6 +31,7 @@ export class OrganizationUnauthorizeController extends Controller {
private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee); private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee);
private profileAssessmentRepo = AppDataSource.getRepository(ProfileAssessment); private profileAssessmentRepo = AppDataSource.getRepository(ProfileAssessment);
private viewProfileEvaluationRepo = AppDataSource.getRepository(viewProfileEvaluation); private viewProfileEvaluationRepo = AppDataSource.getRepository(viewProfileEvaluation);
private viewProfileEmployeeEvaluationRepo = AppDataSource.getRepository(viewProfileEmployeeEvaluation);
/** /**
* API (unauthorize) * API (unauthorize)
@ -1174,12 +1176,12 @@ export class OrganizationUnauthorizeController extends Controller {
* @summary 5 * @summary 5
* *
*/ */
@Get("calculateEvaluation") @Get("calculateEvaluation/{type}")
async calculateEvaluation( async calculateEvaluation(
// @Path() node: number, @Path() type: string,
// @Path() nodeId: string, // @Path() nodeId: string,
) { ) {
const conType = type.toUpperCase();
// let condition :any = {}; // let condition :any = {};
// switch (node) { // switch (node) {
// case 0: // case 0:
@ -1200,21 +1202,23 @@ export class OrganizationUnauthorizeController extends Controller {
// default: // default:
// throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); // throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
// } // }
let lists = null;
const lists = await this.viewProfileEvaluationRepo.find({ lists = await this.viewProfileEvaluationRepo.find({
// where:{ // where:{
// ...condition // ...condition
// } // }
}) })
if(conType == "EMPLOYEE"){
lists = await this.viewProfileEmployeeEvaluationRepo.find({})
}
const groupData: any = {}; const groupData: any = {};
const year = new Date().getFullYear(); const year = new Date().getFullYear();
const years = [year, year - 1, year - 2, year - 3, year - 4]; const years = [year, year - 1, year - 2, year - 3, year - 4];
lists.forEach((item: any) => { lists.forEach((item: any) => {
if (!groupData[item.profileId]) { if (!groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId]) {
groupData[item.profileId] = { groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId] = {
profileId: item.profileId, profileId: conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId,
yearAPR1: "-", periodAPR1: "-", resultAPR1: "-", yearAPR1: "-", periodAPR1: "-", resultAPR1: "-",
yearOCT1: "-", periodOCT1: "-", resultOCT1: "-", yearOCT1: "-", periodOCT1: "-", resultOCT1: "-",
yearAPR2: "-", periodAPR2: "-", resultAPR2: "-", yearAPR2: "-", periodAPR2: "-", resultAPR2: "-",
@ -1227,7 +1231,6 @@ export class OrganizationUnauthorizeController extends Controller {
yearOCT5: "-", periodOCT5: "-", resultOCT5: "-" yearOCT5: "-", periodOCT5: "-", resultOCT5: "-"
}; };
} }
const yearIndex = years.indexOf(parseInt(item.year)); const yearIndex = years.indexOf(parseInt(item.year));
if (yearIndex !== -1) { if (yearIndex !== -1) {
const yearSuffix = yearIndex + 1; const yearSuffix = yearIndex + 1;
@ -1235,38 +1238,43 @@ export class OrganizationUnauthorizeController extends Controller {
const periodKey = `period${item.period}${yearSuffix}`; const periodKey = `period${item.period}${yearSuffix}`;
const resultKey = `result${item.period}${yearSuffix}`; const resultKey = `result${item.period}${yearSuffix}`;
groupData[item.profileId][yearKey] = item.year; groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][yearKey] = item.year;
groupData[item.profileId][periodKey] = item.period; groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][periodKey] = item.period;
groupData[item.profileId][resultKey] = item.result; groupData[conType == "EMPLOYEE"?item.profileEmployeeId:item.profileId][resultKey] = item.result;
} }
}); });
const formattedResults = Object.values(groupData).map((x: any) => ({
const formattedResults = Object.values(groupData).map((item: any) => ({ profileId: x.profileId,
profileId: item.profileId, yearAPR1: x.yearAPR1,
yearAPR1: item.yearAPR1, periodAPR1: x.periodAPR1,
periodAPR1: item.periodAPR1, resultAPR1: x.resultAPR1,
resultAPR1: item.resultAPR1, yearOCT1: x.yearOCT1,
yearOCT1: item.yearOCT1, periodOCT1: x.periodOCT1,
periodOCT1: item.periodOCT1, resultOCT1: x.resultOCT1,
resultOCT1: item.resultOCT1, yearAPR2: x.yearAPR2,
yearAPR2: item.yearAPR2, periodAPR2: x.periodAPR2,
periodAPR2: item.periodAPR2, resultAPR2: x.resultAPR2,
resultAPR2: item.resultAPR2, yearOCT2: x.yearOCT2,
yearOCT2: item.yearOCT2, periodOCT2: x.periodOCT2,
periodOCT2: item.periodOCT2, resultOCT2: x.resultOCT2,
resultOCT2: item.resultOCT2, yearAPR3: x.yearAPR3,
yearAPR3: item.yearAPR3, periodAPR3: x.periodAPR3,
periodAPR3: item.periodAPR3, resultAPR3: x.resultAPR3,
resultAPR3: item.resultAPR3, yearOCT3: x.yearOCT3,
yearOCT3: item.yearOCT3, periodOCT3: x.periodOCT3,
periodOCT3: item.periodOCT3, resultOCT3: x.resultOCT3,
resultOCT3: item.resultOCT3, yearAPR4: x.yearAPR4,
yearAPR4: item.yearAPR4, periodAPR4: x.periodAPR4,
periodAPR4: item.periodAPR4, resultAPR4: x.resultAPR4,
resultAPR4: item.resultAPR4, yearOCT4: x.yearOCT4,
yearOCT4: item.yearOCT4, periodOCT4: x.periodOCT4,
periodOCT4: item.periodOCT4, resultOCT4: x.resultOCT4,
resultOCT4: item.resultOCT4, yearAPR5: x.yearAPR5,
periodAPR5: x.periodAPR5,
resultAPR5: x.resultAPR5,
yearOCT5: x.yearOCT5,
periodOCT5: x.periodOCT5,
resultOCT5: x.resultOCT5,
})); }));
return new HttpSuccess(formattedResults); return new HttpSuccess(formattedResults);

View file

@ -81,25 +81,20 @@ export class ReportController extends Controller {
}, },
}); });
const rawdataProfile = await this.posMasterRepository const rawdataProfile = await this.posMasterRepository
.createQueryBuilder("posMaster") .createQueryBuilder('posMaster')
.leftJoinAndSelect("posMaster.current_holder", "current_holder") .leftJoinAndSelect('posMaster.current_holder', 'current_holder')
.leftJoinAndSelect("posMaster.positions", "positions") .leftJoinAndSelect('posMaster.positions', 'positions')
.leftJoinAndSelect("posMaster.orgRoot", "orgRoot") .leftJoinAndSelect('posMaster.orgRoot', 'orgRoot')
.leftJoinAndSelect("positions.posExecutive", "posExecutive") .leftJoinAndSelect('positions.posExecutive', 'posExecutive')
.leftJoinAndSelect("current_holder.posType", "posType") .leftJoinAndSelect('current_holder.posType', 'posType')
.leftJoinAndSelect("current_holder.posLevel", "posLevel") .leftJoinAndSelect('current_holder.posLevel', 'posLevel')
.leftJoinAndSelect("current_holder.profileEducations", "profileEducations") .leftJoinAndSelect('current_holder.profileEducations', 'profileEducations')
.where("posMaster.orgRevisionId = :currentRevisionId", { .where('posMaster.orgRevisionId = :currentRevisionId', { currentRevisionId: currentRevision?.id })
currentRevisionId: currentRevision?.id, .andWhere(rootId?'posMaster.orgRootId = :rootId': "1=1", { rootId: rootId })
}) .andWhere('posMaster.current_holderId Is Not Null')
.andWhere(rootId ? "posMaster.orgRootId = :rootId" : "1=1", { rootId: rootId }) .andWhere('positions.positionIsSelected = :positionIsSelected', { positionIsSelected: true })
.andWhere("posMaster.current_holderId Is Not Null") .andWhere( yearInAD && yearInAD != null? 'YEAR(current_holder.dateAppoint) = :year': "1=1", { year: yearInAD }) //ตอนนี้ where ที่วันที่บรรจุ (รอ prove) ว่าจะ where ที่ไหน
.andWhere("positions.positionIsSelected = :positionIsSelected", { positionIsSelected: true }) .andWhere(`
.andWhere(yearInAD && yearInAD != null ? "YEAR(current_holder.dateAppoint) = :year" : "1=1", {
year: yearInAD,
})
.andWhere(
`
TIMESTAMPDIFF(YEAR, current_holder.birthDate, CURDATE()) >= :minAge TIMESTAMPDIFF(YEAR, current_holder.birthDate, CURDATE()) >= :minAge
AND TIMESTAMPDIFF(YEAR, current_holder.birthDate, CURDATE()) <= :maxAge AND TIMESTAMPDIFF(YEAR, current_holder.birthDate, CURDATE()) <= :maxAge
`, `,
@ -157,7 +152,6 @@ export class ReportController extends Controller {
...item, ...item,
count: Extension.ToThaiNumber(item.count.toString()), count: Extension.ToThaiNumber(item.count.toString()),
})); }));
return new HttpSuccess({ return new HttpSuccess({
template: "registry-officer", template: "registry-officer",
reportName: "xlsx-report", reportName: "xlsx-report",

View file

@ -12,12 +12,12 @@ export class OFFICER {
// }) // })
// RET_YEAR: string; // RET_YEAR: string;
@Column({ // @Column({
nullable: true, // nullable: true,
type: "text", // type: "text",
default: null, // default: null,
}) // })
ID: string; // ID: string;
@Column({ @Column({
nullable: true, nullable: true,

View file

@ -0,0 +1,55 @@
import { ViewColumn, ViewEntity } from "typeorm";
@ViewEntity({
expression: `SELECT
\`profileEmployeeId\`,
\`period\`,
\`year\`,
\`employeePosMaster\`.\`orgRootId\`,
\`employeePosMaster\`.\`orgChild1Id\`,
\`employeePosMaster\`.\`orgChild2Id\`,
\`employeePosMaster\`.\`orgChild3Id\`,
\`employeePosMaster\`.\`orgChild4Id\`,
COUNT(*) AS recordCount,
SUM(pointSum) AS totalPointSum,
SUM(pointSum) / COUNT(*) AS result
FROM \`profileAssessment\`
LEFT JOIN \`profileEmployee\` ON \`profileAssessment\`.\`profileEmployeeId\` = \`profileEmployee\`.\`id\`
LEFT JOIN \`employeePosMaster\` ON \`profileEmployee\`.\`id\` = \`employeePosMaster\`.\`current_holderId\`
LEFT JOIN \`orgRevision\` ON \`employeePosMaster\`.\`orgRevisionId\` = \`orgRevision\`.\`id\`
WHERE \`period\` IS NOT NULL
AND \`orgRevision\`.\`orgRevisionIsCurrent\` = TRUE
GROUP BY \`profileEmployeeId\`, \`period\`, \`year\`,
\`employeePosMaster\`.\`orgRootId\`,
\`employeePosMaster\`.\`orgChild1Id\`,
\`employeePosMaster\`.\`orgChild2Id\`,
\`employeePosMaster\`.\`orgChild3Id\`,
\`employeePosMaster\`.\`orgChild4Id\`
ORDER BY \`year\` DESC, \`period\` ASC;
`,
})
export class viewProfileEmployeeEvaluation {
@ViewColumn()
profileEmployeeId: string;
@ViewColumn()
period: string;
@ViewColumn()
year: number;
@ViewColumn()
orgRootId: string;
@ViewColumn()
orgChild1Id: string;
@ViewColumn()
orgChild2Id: string;
@ViewColumn()
orgChild3Id: string;
@ViewColumn()
orgChild4Id: string;
@ViewColumn()
recordCount: number;
@ViewColumn()
totalPointSum: number;
@ViewColumn()
result: number;
}

View file

@ -0,0 +1,41 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class AddViewProfileEmployeeEvaluation1739768503699 implements MigrationInterface {
name = 'AddViewProfileEmployeeEvaluation1739768503699'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE VIEW \`view_profile_employee_evaluation\` AS SELECT
\`profileEmployeeId\`,
\`period\`,
\`year\`,
\`employeePosMaster\`.\`orgRootId\`,
\`employeePosMaster\`.\`orgChild1Id\`,
\`employeePosMaster\`.\`orgChild2Id\`,
\`employeePosMaster\`.\`orgChild3Id\`,
\`employeePosMaster\`.\`orgChild4Id\`,
COUNT(*) AS recordCount,
SUM(pointSum) AS totalPointSum,
SUM(pointSum) / COUNT(*) AS result
FROM \`profileAssessment\`
LEFT JOIN \`profileEmployee\` ON \`profileAssessment\`.\`profileEmployeeId\` = \`profileEmployee\`.\`id\`
LEFT JOIN \`employeePosMaster\` ON \`profileEmployee\`.\`id\` = \`employeePosMaster\`.\`current_holderId\`
LEFT JOIN \`orgRevision\` ON \`employeePosMaster\`.\`orgRevisionId\` = \`orgRevision\`.\`id\`
WHERE \`period\` IS NOT NULL
AND \`orgRevision\`.\`orgRevisionIsCurrent\` = TRUE
GROUP BY \`profileEmployeeId\`, \`period\`, \`year\`,
\`employeePosMaster\`.\`orgRootId\`,
\`employeePosMaster\`.\`orgChild1Id\`,
\`employeePosMaster\`.\`orgChild2Id\`,
\`employeePosMaster\`.\`orgChild3Id\`,
\`employeePosMaster\`.\`orgChild4Id\`
ORDER BY \`year\` DESC, \`period\` ASC;
`);
await queryRunner.query(`INSERT INTO \`bma_ehr_organization_demo\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["bma_ehr_organization_demo","VIEW","view_profile_employee_evaluation","SELECT \n `profileEmployeeId`,\n `period`,\n `year`,\n `employeePosMaster`.`orgRootId`,\n `employeePosMaster`.`orgChild1Id`,\n `employeePosMaster`.`orgChild2Id`,\n `employeePosMaster`.`orgChild3Id`,\n `employeePosMaster`.`orgChild4Id`, \n COUNT(*) AS recordCount, \n SUM(pointSum) AS totalPointSum, \n SUM(pointSum) / COUNT(*) AS result\n FROM `profileAssessment` \n LEFT JOIN `profileEmployee` ON `profileAssessment`.`profileEmployeeId` = `profileEmployee`.`id`\n LEFT JOIN `employeePosMaster` ON `profileEmployee`.`id` = `employeePosMaster`.`current_holderId`\n LEFT JOIN `orgRevision` ON `employeePosMaster`.`orgRevisionId` = `orgRevision`.`id`\n WHERE `period` IS NOT NULL\n AND `orgRevision`.`orgRevisionIsCurrent` = TRUE\n GROUP BY `profileEmployeeId`, `period`, `year`, \n `employeePosMaster`.`orgRootId`, \n `employeePosMaster`.`orgChild1Id`, \n `employeePosMaster`.`orgChild2Id`, \n `employeePosMaster`.`orgChild3Id`, \n `employeePosMaster`.`orgChild4Id`\n ORDER BY `year` DESC, `period` ASC;"]);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM \`bma_ehr_organization_demo\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW","view_profile_employee_evaluation","bma_ehr_organization_demo"]);
await queryRunner.query(`DROP VIEW \`view_profile_employee_evaluation\``);
}
}