1502 lines
60 KiB
TypeScript
1502 lines
60 KiB
TypeScript
import {
|
|
Controller,
|
|
Get,
|
|
Post,
|
|
Put,
|
|
Delete,
|
|
Route,
|
|
Security,
|
|
Tags,
|
|
Body,
|
|
Path,
|
|
Request,
|
|
Example,
|
|
SuccessResponse,
|
|
Response,
|
|
Query,
|
|
ArrayValidator,
|
|
} from "tsoa";
|
|
import { AppDataSource } from "../database/data-source";
|
|
import HttpSuccess from "../interfaces/http-success";
|
|
import HttpError from "../interfaces/http-error";
|
|
import HttpStatusCode from "../interfaces/http-status";
|
|
import { KpiPeriod } from "../entities/kpiPeriod";
|
|
import {
|
|
KpiUserEvaluation,
|
|
createKpiUserEvaluation,
|
|
updateKpiUserCheckEvaluation,
|
|
updateKpiUserEvaluation,
|
|
updateKpiUserPointEvaluation,
|
|
updateKpiUserStatusEvaluation,
|
|
updateKpiUserReqEditEvaluation,
|
|
updateKpiUserResultEvaluation,
|
|
} from "../entities/kpiUserEvaluation";
|
|
import { Like, In, Brackets, IsNull, Not } from "typeorm";
|
|
import CallAPI from "../interfaces/call-api";
|
|
import { KpiCapacity } from "../entities/kpiCapacity";
|
|
import { Position } from "../entities/position";
|
|
import { KpiLink } from "../entities/kpiLink";
|
|
import { KpiGroup } from "../entities/kpiGroup";
|
|
|
|
@Route("api/v1/kpi/user/evaluation")
|
|
@Tags("kpiUserEvaluation")
|
|
@Security("bearerAuth")
|
|
@Response(
|
|
HttpStatusCode.INTERNAL_SERVER_ERROR,
|
|
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
|
|
)
|
|
@SuccessResponse(HttpStatusCode.OK, "สำเร็จ")
|
|
export class KpiUserEvaluationController extends Controller {
|
|
private kpiPeriodRepository = AppDataSource.getRepository(KpiPeriod);
|
|
private kpiUserEvalutionRepository = AppDataSource.getRepository(KpiUserEvaluation);
|
|
private kpiCapacityRepository = AppDataSource.getRepository(KpiCapacity);
|
|
private kpiPositionRepository = AppDataSource.getRepository(Position);
|
|
private kpiLinkRepository = AppDataSource.getRepository(KpiLink);
|
|
private kpiGroupRepository = AppDataSource.getRepository(KpiGroup);
|
|
|
|
/**
|
|
* API
|
|
*
|
|
* @summary รายการประเมินผลการปฏิบัติราชการระดับบุคคลทั้งหมด
|
|
*
|
|
*/
|
|
@Post("admin")
|
|
async listKpiAdminEvaluation(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Body()
|
|
requestBody: {
|
|
page: number;
|
|
pageSize: number;
|
|
kpiPeriodId?: string;
|
|
keyword?: string;
|
|
status?: string | null;
|
|
results?: string | null;
|
|
reqedit?: string | null;
|
|
evaluating?: boolean | null;
|
|
},
|
|
) {
|
|
let profileId: any = null;
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
profileId = x.profileId;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
|
|
// let role = "EVALUATOR";
|
|
// if (profileId == item.commanderId) {
|
|
// role = "COMMANDER";
|
|
// } else if (profileId == item.commanderHighId) {
|
|
// role = "COMMANDERHIGH";
|
|
// }
|
|
const [kpiUserEvaluation, total] = await AppDataSource.getRepository(KpiUserEvaluation)
|
|
.createQueryBuilder("kpiUserEvaluation")
|
|
.andWhere(requestBody.kpiPeriodId ? "kpiPeriodId LIKE :kpiPeriodId" : "1=1", {
|
|
kpiPeriodId: requestBody.kpiPeriodId,
|
|
})
|
|
.andWhere(
|
|
requestBody.status != null && requestBody.status != undefined
|
|
? requestBody.status.trim().toUpperCase() == "NEW"
|
|
? `evaluationStatus LIKE CASE WHEN evaluatorId = "${profileId}" THEN "NEW_EVALUATOR" WHEN commanderId = "${profileId}" THEN "NEW_COMMANDER" WHEN commanderHighId = "${profileId}" THEN "NEW_COMMANDER_HIGH" ELSE "${requestBody.status.trim().toUpperCase()}" END`
|
|
: requestBody.status.trim().toUpperCase() == "EVALUATING_EVALUATOR" ||
|
|
requestBody.status.trim().toUpperCase() == "EVALUATING"
|
|
? "evaluationStatus LIKE :status"
|
|
: requestBody.status.trim().toUpperCase() == "SUMMARY"
|
|
? "evaluationStatus LIKE :status"
|
|
: "evaluationStatus LIKE :status"
|
|
: "1=1",
|
|
{
|
|
status:
|
|
requestBody.status == null || requestBody.status == undefined
|
|
? null
|
|
: requestBody.status.trim().toUpperCase() == "EVALUATING" ||
|
|
requestBody.status.trim().toUpperCase() == "EVALUATING_EVALUATOR" ||
|
|
requestBody.status.trim().toUpperCase() == "SUMMARY"
|
|
? requestBody.status.trim().toUpperCase() == "SUMMARY"
|
|
? `%${requestBody.status.trim().toUpperCase()}%`
|
|
: `%EVALUATING%`
|
|
: requestBody.status.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.andWhere(
|
|
requestBody.results != null && requestBody.results != undefined
|
|
? "evaluationResults LIKE :results"
|
|
: "1=1",
|
|
{
|
|
results:
|
|
requestBody.results == null || requestBody.results == undefined
|
|
? null
|
|
: requestBody.results.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.andWhere(
|
|
requestBody.reqedit != null && requestBody.reqedit != undefined
|
|
? requestBody.reqedit.trim().toUpperCase() == "NEW"
|
|
? `evaluationReqEdit LIKE CASE WHEN evaluatorId = "${profileId}" THEN "EVALUATOR" WHEN commanderId = "${profileId}" THEN "COMMANDER" WHEN commanderHighId = "${profileId}" THEN "COMMANDER_HIGH" ELSE "${requestBody.reqedit.trim().toUpperCase()}" END`
|
|
: "evaluationReqEdit LIKE :reqedit"
|
|
: "1=1",
|
|
{
|
|
reqedit:
|
|
requestBody.reqedit == null || requestBody.reqedit == undefined
|
|
? null
|
|
: requestBody.reqedit.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.andWhere(
|
|
new Brackets((qb) => {
|
|
qb.orWhere("kpiUserEvaluation.evaluatorId LIKE :profileId", {
|
|
profileId: `${profileId}`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.commanderId LIKE :profileId", {
|
|
profileId: `${profileId}`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.commanderHighId LIKE :profileId", {
|
|
profileId: `${profileId}`,
|
|
});
|
|
}),
|
|
)
|
|
.andWhere(
|
|
new Brackets((qb) => {
|
|
qb.orWhere("kpiUserEvaluation.prefix LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.firstName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.lastName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
});
|
|
}),
|
|
)
|
|
.orderBy("kpiUserEvaluation.createdAt", "ASC")
|
|
.skip((requestBody.page - 1) * requestBody.pageSize)
|
|
.take(requestBody.pageSize)
|
|
.getManyAndCount();
|
|
|
|
const mapData = kpiUserEvaluation.map((item) => ({
|
|
id: item.id,
|
|
profileId: item.profileId,
|
|
prefix: item.prefix,
|
|
firstname: item.firstName,
|
|
lastname: item.lastName,
|
|
kpiPeriodId: item.kpiPeriodId,
|
|
evaluationStatus: item.evaluationStatus,
|
|
evaluationResults: item.evaluationResults,
|
|
createdAt: item.createdAt,
|
|
evaluatorId: item.evaluatorId,
|
|
commanderId: item.commanderId,
|
|
commanderHighId: item.commanderHighId,
|
|
}));
|
|
return new HttpSuccess({ data: mapData, total });
|
|
}
|
|
|
|
/**
|
|
* API
|
|
*
|
|
* @summary รายการประเมินผลการปฏิบัติราชการระดับบุคคลทั้งหมด
|
|
*
|
|
*/
|
|
@Post("list")
|
|
async listKpiListEvaluation(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Body()
|
|
requestBody: {
|
|
page: number;
|
|
pageSize: number;
|
|
kpiPeriodId?: string;
|
|
keyword?: string;
|
|
status?: string | null;
|
|
results?: string | null;
|
|
reqedit?: string | null;
|
|
evaluating?: boolean | null;
|
|
},
|
|
) {
|
|
const [kpiUserEvaluation, total] = await AppDataSource.getRepository(KpiUserEvaluation)
|
|
.createQueryBuilder("kpiUserEvaluation")
|
|
.andWhere(requestBody.kpiPeriodId ? "kpiPeriodId LIKE :kpiPeriodId" : "1=1", {
|
|
kpiPeriodId: requestBody.kpiPeriodId,
|
|
})
|
|
.andWhere(
|
|
requestBody.status != null && requestBody.status != undefined
|
|
? "evaluationstatus LIKE :status"
|
|
: "1=1",
|
|
{
|
|
status:
|
|
requestBody.status == null || requestBody.status == undefined
|
|
? null
|
|
: requestBody.status.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.andWhere(
|
|
requestBody.results != null && requestBody.results != undefined
|
|
? "evaluationResults LIKE :results"
|
|
: "1=1",
|
|
{
|
|
results:
|
|
requestBody.results == null || requestBody.results == undefined
|
|
? null
|
|
: requestBody.results.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.andWhere(
|
|
new Brackets((qb) => {
|
|
qb.orWhere("kpiUserEvaluation.prefix LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.firstName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.lastName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.org LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.position LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.posTypeName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
})
|
|
.orWhere("kpiUserEvaluation.posLevelName LIKE :keyword", {
|
|
keyword: `%${requestBody.keyword}%`,
|
|
});
|
|
}),
|
|
)
|
|
.orderBy("kpiUserEvaluation.createdAt", "ASC")
|
|
.skip((requestBody.page - 1) * requestBody.pageSize)
|
|
.take(requestBody.pageSize)
|
|
.getManyAndCount();
|
|
|
|
const mapData = kpiUserEvaluation.map((item) => {
|
|
const fullNameParts = [item.child4, item.child3, item.child2, item.child1, item.org];
|
|
|
|
const organization = fullNameParts
|
|
.filter((part) => part !== undefined && part !== null)
|
|
.join("/");
|
|
|
|
return {
|
|
id: item.id,
|
|
profileId: item.profileId,
|
|
prefix: item.prefix,
|
|
firstname: item.firstName,
|
|
lastname: item.lastName,
|
|
kpiPeriodId: item.kpiPeriodId,
|
|
evaluationStatus: item.evaluationStatus,
|
|
evaluationResults: item.evaluationResults,
|
|
createdAt: item.createdAt,
|
|
evaluatorId: item.evaluatorId,
|
|
commanderId: item.commanderId,
|
|
commanderHighId: item.commanderHighId,
|
|
root: item.org ? item.org : null,
|
|
rootId: item.orgId ? item.orgId : null,
|
|
position: item.position ? item.position : null,
|
|
// posTypeId: item.posTypeId,
|
|
posTypeName: item.posTypeName ? item.posTypeName : null,
|
|
// posLevelId: item.posLevelId,
|
|
posLevelName: item.posLevelName ? item.posLevelName : null,
|
|
organization: organization ? organization : null,
|
|
};
|
|
});
|
|
return new HttpSuccess({ data: mapData, total });
|
|
}
|
|
|
|
/**
|
|
* API สร้างรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @summary สร้างรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
*
|
|
*/
|
|
@Post()
|
|
async CreateKpiUserEvaluation(
|
|
@Body() requestBody: createKpiUserEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiPeriod = await this.kpiPeriodRepository.findOne({
|
|
where: { id: requestBody.kpiPeriodId },
|
|
});
|
|
if (!kpiPeriod) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรอบการประเมินผลการปฏิบัติหน้าที่ราชการนี้",
|
|
);
|
|
}
|
|
|
|
const kpiUserEvaluation = Object.assign(new KpiUserEvaluation(), requestBody);
|
|
if (requestBody.profileId != undefined && requestBody.profileId != null) {
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/profileid/position/" + requestBody.profileId)
|
|
.then((x) => {
|
|
kpiUserEvaluation.profileId = x.profileId;
|
|
kpiUserEvaluation.prefix = x.prefix;
|
|
kpiUserEvaluation.firstName = x.firstName;
|
|
kpiUserEvaluation.lastName = x.lastName;
|
|
kpiUserEvaluation.position = x.position;
|
|
kpiUserEvaluation.posLevelName = x.posLevelName;
|
|
kpiUserEvaluation.posTypeName = x.posTypeName;
|
|
kpiUserEvaluation.posExecutiveName = x.posExecutiveName;
|
|
kpiUserEvaluation.org = x.root;
|
|
kpiUserEvaluation.orgId = x.rootId;
|
|
kpiUserEvaluation.child1 = x.child1;
|
|
kpiUserEvaluation.child1Id = x.child1Id;
|
|
kpiUserEvaluation.child2 = x.child2;
|
|
kpiUserEvaluation.child2Id = x.child2Id;
|
|
kpiUserEvaluation.child3 = x.child3;
|
|
kpiUserEvaluation.child3Id = x.child3Id;
|
|
kpiUserEvaluation.child4 = x.child4;
|
|
kpiUserEvaluation.child4Id = x.child4Id;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
} else {
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
kpiUserEvaluation.profileId = x.profileId;
|
|
kpiUserEvaluation.prefix = x.prefix;
|
|
kpiUserEvaluation.firstName = x.firstName;
|
|
kpiUserEvaluation.lastName = x.lastName;
|
|
kpiUserEvaluation.position = x.position;
|
|
kpiUserEvaluation.posLevelName = x.posLevelName;
|
|
kpiUserEvaluation.posTypeName = x.posTypeName;
|
|
kpiUserEvaluation.posExecutiveName = x.posExecutiveName;
|
|
kpiUserEvaluation.org = x.root;
|
|
kpiUserEvaluation.orgId = x.rootId;
|
|
kpiUserEvaluation.child1 = x.child1;
|
|
kpiUserEvaluation.child1Id = x.child1Id;
|
|
kpiUserEvaluation.child2 = x.child2;
|
|
kpiUserEvaluation.child2Id = x.child2Id;
|
|
kpiUserEvaluation.child3 = x.child3;
|
|
kpiUserEvaluation.child3Id = x.child3Id;
|
|
kpiUserEvaluation.child4 = x.child4;
|
|
kpiUserEvaluation.child4Id = x.child4Id;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
}
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/profileid/position/" + requestBody.evaluatorId)
|
|
.then((x) => {
|
|
kpiUserEvaluation.prefixEvaluator = x.prefix;
|
|
kpiUserEvaluation.firstNameEvaluator = x.firstName;
|
|
kpiUserEvaluation.lastNameEvaluator = x.lastName;
|
|
kpiUserEvaluation.positionEvaluator = x.position;
|
|
kpiUserEvaluation.posLevelNameEvaluator = x.posLevelName;
|
|
kpiUserEvaluation.posTypeNameEvaluator = x.posTypeName;
|
|
kpiUserEvaluation.orgEvaluator = x.root;
|
|
});
|
|
kpiUserEvaluation.evaluationStatus = "NEW";
|
|
kpiUserEvaluation.evaluationResults = "PENDING";
|
|
kpiUserEvaluation.createdUserId = request.user.sub;
|
|
kpiUserEvaluation.createdFullName = request.user.name;
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
|
|
enum CapacityType {
|
|
HEAD = "HEAD",
|
|
GROUP = "GROUP",
|
|
}
|
|
|
|
// MAIN CAPACITY
|
|
const mainCapacities = await this.kpiCapacityRepository.find({
|
|
where: { type: CapacityType.HEAD },
|
|
});
|
|
|
|
let level: any = null;
|
|
if (kpiUserEvaluation.posTypeName == "บริหาร" && kpiUserEvaluation.posLevelName == "สูง")
|
|
level = "5";
|
|
if (kpiUserEvaluation.posTypeName == "บริหาร" && kpiUserEvaluation.posLevelName == "ต้น")
|
|
level = "4";
|
|
if (kpiUserEvaluation.posTypeName == "อำนวยการ" && kpiUserEvaluation.posLevelName == "สูง")
|
|
level = "4";
|
|
if (kpiUserEvaluation.posTypeName == "อำนวยการ" && kpiUserEvaluation.posLevelName == "ต้น")
|
|
level = "3";
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ทรงคุณวุฒิ"
|
|
)
|
|
level = "5";
|
|
if (kpiUserEvaluation.posTypeName == "วิชาการ" && kpiUserEvaluation.posLevelName == "เชี่ยวชาญ")
|
|
level = "4";
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ชำนาญการพิเศษ"
|
|
)
|
|
level = "3";
|
|
if (kpiUserEvaluation.posTypeName == "วิชาการ" && kpiUserEvaluation.posLevelName == "ชำนาญการ")
|
|
level = "2";
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ปฏิบัติการ"
|
|
)
|
|
level = "1";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ทักษะพิเศษ")
|
|
level = "4";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "อาวุโส")
|
|
level = "3";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ชำนาญงาน")
|
|
level = "2";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ปฏิบัติงาน")
|
|
level = "1";
|
|
for (const capacity of mainCapacities) {
|
|
await new CallAPI()
|
|
.PostData(request, "/kpi/user/capacity", {
|
|
kpiUserEvaluationId: kpiUserEvaluation.id,
|
|
kpiCapacityId: capacity.id,
|
|
level: level,
|
|
weight: 100,
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, x);
|
|
});
|
|
}
|
|
|
|
// GROUP CAPACITY
|
|
const findPosition = await this.kpiPositionRepository.findOne({
|
|
where: { name: kpiUserEvaluation.position, kpiLinkId: Not(IsNull()) },
|
|
});
|
|
|
|
let levelForGourp: any = null;
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ทรงคุณวุฒิ"
|
|
)
|
|
levelForGourp = "5";
|
|
if (kpiUserEvaluation.posTypeName == "วิชาการ" && kpiUserEvaluation.posLevelName == "เชี่ยวชาญ")
|
|
levelForGourp = "4";
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ชำนาญการพิเศษ"
|
|
)
|
|
levelForGourp = "4";
|
|
if (kpiUserEvaluation.posTypeName == "วิชาการ" && kpiUserEvaluation.posLevelName == "ชำนาญการ")
|
|
levelForGourp = "3";
|
|
if (
|
|
kpiUserEvaluation.posTypeName == "วิชาการ" &&
|
|
kpiUserEvaluation.posLevelName == "ปฏิบัติการ"
|
|
)
|
|
levelForGourp = "2";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ทักษะพิเศษ")
|
|
levelForGourp = "4";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "อาวุโส")
|
|
levelForGourp = "3";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ชำนาญงาน")
|
|
levelForGourp = "2";
|
|
if (kpiUserEvaluation.posTypeName == "ทั่วไป" && kpiUserEvaluation.posLevelName == "ปฏิบัติงาน")
|
|
levelForGourp = "1";
|
|
kpiUserEvaluation.weightPoint1 = 80;
|
|
kpiUserEvaluation.weightPoint2 = 20;
|
|
kpiUserEvaluation.summaryWeight = 100;
|
|
if (findPosition && findPosition.kpiLinkId && levelForGourp != null) {
|
|
kpiUserEvaluation.weightPoint1 = 70;
|
|
kpiUserEvaluation.weightPoint2 = 30;
|
|
kpiUserEvaluation.summaryWeight = 100;
|
|
const findKpiLink = await this.kpiLinkRepository.findOne({
|
|
relations: ["kpiCapacitys"],
|
|
where: {
|
|
id: findPosition.kpiLinkId,
|
|
},
|
|
});
|
|
if (findKpiLink) {
|
|
let groupCapacity = findKpiLink.kpiCapacitys;
|
|
for (const capacity of groupCapacity) {
|
|
await new CallAPI()
|
|
.PostData(request, "/kpi/user/capacity", {
|
|
kpiUserEvaluationId: kpiUserEvaluation.id,
|
|
kpiCapacityId: capacity.id,
|
|
level: levelForGourp,
|
|
weight: 100,
|
|
})
|
|
.catch((error) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถสร้างข้อมูลสมรรถนะได้");
|
|
});
|
|
}
|
|
}
|
|
}
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("check/{id}")
|
|
async updateKpiUserCheckEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserCheckEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
Object.assign(kpiUserEvaluation, requestBody);
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("point/{id}")
|
|
async updateKpiUserPointEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserPointEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
|
|
if (requestBody.summaryPoint != null) {
|
|
if (requestBody.summaryPoint >= 90) {
|
|
kpiUserEvaluation.evaluationResults = "EXCELLENT";
|
|
} else if (requestBody.summaryPoint >= 80) {
|
|
kpiUserEvaluation.evaluationResults = "VERY_GOOD";
|
|
} else if (requestBody.summaryPoint >= 70) {
|
|
kpiUserEvaluation.evaluationResults = "GOOD";
|
|
} else if (requestBody.summaryPoint >= 60) {
|
|
kpiUserEvaluation.evaluationResults = "FAIR";
|
|
} else {
|
|
kpiUserEvaluation.evaluationResults = "IMPROVEMENT";
|
|
}
|
|
} else {
|
|
kpiUserEvaluation.evaluationResults = "IMPROVEMENT";
|
|
}
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
Object.assign(kpiUserEvaluation, requestBody);
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @summary แก้ไขรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @param {string} id Guid, *Id รายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*/
|
|
@Put("{id}")
|
|
async updateKpiUserEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
|
|
const kpiPeriod = await this.kpiPeriodRepository.findOne({
|
|
where: { id: requestBody.kpiPeriodId },
|
|
});
|
|
if (!kpiPeriod) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรอบการประเมินผลการปฏิบัติหน้าที่ราชการนี้",
|
|
);
|
|
}
|
|
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
Object.assign(kpiUserEvaluation, requestBody);
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสถานะประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("edit/{id}")
|
|
async updateKpiUserReqEditEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserReqEditEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
kpiUserEvaluation.evaluationReqEdit = requestBody.status.trim().toUpperCase();
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสถานะประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("result/{id}")
|
|
async updateKpiUserResultEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserResultEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
kpiUserEvaluation.evaluationResults = requestBody.status.trim().toUpperCase();
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสถานะประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขคนประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("status/{id}")
|
|
async updateKpiUserStatusEvaluation(
|
|
@Path() id: string,
|
|
@Body() requestBody: updateKpiUserStatusEvaluation,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
if (requestBody.status.trim().toUpperCase() == "NEW_EVALUATOR") {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ส่งข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลให้อนุมัติ`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ส่งข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลให้อนุมัติ`,
|
|
receiverUserId: kpiUserEvaluation.evaluatorId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
} else if (requestBody.status.trim().toUpperCase() == "EVALUATING_EVALUATOR") {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} สรุปการประเมินผลการปฏิบัติราชการระดับบุคคล`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} สรุปการประเมินผลการปฏิบัติราชการระดับบุคคล`,
|
|
receiverUserId: kpiUserEvaluation.evaluatorId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
}
|
|
kpiUserEvaluation.evaluationStatus = requestBody.status.trim().toUpperCase();
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API รายละเอียดรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @summary รายละเอียดรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @param {string} id Guid, *Id รายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*/
|
|
@Get("{id}")
|
|
async GetKpiUserEvaluationById(@Path() id: string) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
relations: ["kpiPeriod"],
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
const mapData = {
|
|
id: kpiUserEvaluation.id,
|
|
profileId: kpiUserEvaluation.profileId,
|
|
prefix: kpiUserEvaluation.prefix,
|
|
firstName: kpiUserEvaluation.firstName,
|
|
lastName: kpiUserEvaluation.lastName,
|
|
position: kpiUserEvaluation.position,
|
|
posLevelName: kpiUserEvaluation.posLevelName,
|
|
posTypeName: kpiUserEvaluation.posTypeName,
|
|
posExecutiveName: kpiUserEvaluation.posExecutiveName,
|
|
evaluationStatus: kpiUserEvaluation.evaluationStatus,
|
|
evaluationResults: kpiUserEvaluation.evaluationResults,
|
|
evaluationReqEdit: kpiUserEvaluation.evaluationReqEdit,
|
|
createdAt: kpiUserEvaluation.createdAt,
|
|
evaluatorId: kpiUserEvaluation.evaluatorId,
|
|
commanderId: kpiUserEvaluation.commanderId,
|
|
commanderHighId: kpiUserEvaluation.commanderHighId,
|
|
// plannedPoint: kpiUserEvaluation.plannedPoint,
|
|
// rolePoint: kpiUserEvaluation.rolePoint,
|
|
// specialPoint: kpiUserEvaluation.specialPoint,
|
|
// capacityPoint: kpiUserEvaluation.capacityPoint,
|
|
kpiPeriodId: kpiUserEvaluation.kpiPeriodId,
|
|
totalPoint1: kpiUserEvaluation.totalPoint1,
|
|
totalPoint2_1: kpiUserEvaluation.totalPoint2_1,
|
|
totalPoint2_2: kpiUserEvaluation.totalPoint2_2,
|
|
summaryPoint: kpiUserEvaluation.summaryPoint,
|
|
isOpen: kpiUserEvaluation.isOpen,
|
|
openDate: kpiUserEvaluation.openDate,
|
|
year: kpiUserEvaluation.kpiPeriod == null ? null : kpiUserEvaluation.kpiPeriod.year,
|
|
durationKPI:
|
|
kpiUserEvaluation.kpiPeriod == null ? null : kpiUserEvaluation.kpiPeriod.durationKPI,
|
|
};
|
|
return new HttpSuccess(mapData);
|
|
}
|
|
|
|
/**
|
|
* API รายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @summary รายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
*/
|
|
@Get()
|
|
async listKpiUserEvaluation(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Query("page") page: number = 1,
|
|
@Query("pageSize") pageSize: number = 10,
|
|
@Query("kpiPeriodId") kpiPeriodId?: string,
|
|
@Query("keyword") keyword?: string,
|
|
@Query("status") status?: string,
|
|
) {
|
|
let profileId: any = null;
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
profileId = x.profileId;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
const [kpiUserEvaluation, total] = await AppDataSource.getRepository(KpiUserEvaluation)
|
|
.createQueryBuilder("kpiUserEvaluation")
|
|
.leftJoinAndSelect("kpiUserEvaluation.kpiPeriod", "kpiPeriod")
|
|
.andWhere(kpiPeriodId ? "kpiPeriodId LIKE :kpiPeriodId" : "1=1", {
|
|
kpiPeriodId: kpiPeriodId,
|
|
})
|
|
// .andWhere({ createdUserId: request.user.sub })
|
|
.andWhere({ profileId: profileId })
|
|
.andWhere(
|
|
status == null || status == undefined ? "1=1" : "evaluationStatus LIKE :evaluationStatus",
|
|
{
|
|
evaluationStatus: status == undefined ? "" : status.trim().toUpperCase(),
|
|
},
|
|
)
|
|
.orderBy("kpiUserEvaluation.createdAt", "ASC")
|
|
.skip((page - 1) * pageSize)
|
|
.take(pageSize)
|
|
.getManyAndCount();
|
|
|
|
const mapData = kpiUserEvaluation.map((item) => ({
|
|
id: item.id,
|
|
profileId: item.profileId,
|
|
prefix: item.prefix,
|
|
firstname: item.firstName,
|
|
lastname: item.lastName,
|
|
kpiPeriodId: item.kpiPeriodId,
|
|
evaluationStatus: item.evaluationStatus,
|
|
evaluationResults: item.evaluationResults,
|
|
evaluatorId: item.evaluatorId,
|
|
commanderId: item.commanderId,
|
|
commanderHighId: item.commanderHighId,
|
|
createdAt: item.createdAt,
|
|
plannedPoint: item.plannedPoint,
|
|
rolePoint: item.rolePoint,
|
|
specialPoint: item.specialPoint,
|
|
capacityPoint: item.capacityPoint,
|
|
year: item.kpiPeriod ? item.kpiPeriod.year : null,
|
|
durationKPI: item.kpiPeriod ? item.kpiPeriod.durationKPI : null,
|
|
}));
|
|
return new HttpSuccess({ data: mapData, total });
|
|
}
|
|
|
|
/**
|
|
* API ลบรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @summary ลบรายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*
|
|
* @param {string} id Guid, *Id รายการประเมินผลการปฏิบัติราชการระดับบุคคล (USER)
|
|
*/
|
|
@Delete("{id}")
|
|
async deleteKpiUserEvaluation(@Path() id: string) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
await this.kpiUserEvalutionRepository.remove(kpiUserEvaluation);
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* API แก้สถานะแบบประเมินตามรายการที่เลือก
|
|
*
|
|
* @summary แก้สถานะแบบประเมินตามรายการที่เลือก
|
|
*
|
|
*
|
|
*/
|
|
@Post("admin/change-status")
|
|
async ChangeStatus(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Body()
|
|
requestBody: {
|
|
status: string;
|
|
id: string[];
|
|
},
|
|
) {
|
|
let profileId: any = null;
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
profileId = x.profileId;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
const list = await this.kpiUserEvalutionRepository.find({
|
|
where: { id: In(requestBody.id) },
|
|
});
|
|
if (!list || list.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
|
|
const hasAllData = requestBody.id.every((id) => list.some((item) => item.id === id));
|
|
|
|
if (!hasAllData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "พบบางไอดีผู้ประเมินที่ไม่มีข้อมูล");
|
|
}
|
|
|
|
list.forEach(async (item) => {
|
|
let role = "EVALUATOR";
|
|
if (profileId == item.commanderId) {
|
|
role = "COMMANDER";
|
|
} else if (profileId == item.commanderHighId) {
|
|
role = "COMMANDERHIGH";
|
|
}
|
|
if (requestBody.status.trim().toUpperCase() == "APPROVE") {
|
|
if (role == "EVALUATOR") {
|
|
if (item.evaluationStatus == "NEW_EVALUATOR") {
|
|
if (item.commanderId == null || item.commanderId == "") {
|
|
item.evaluationStatus = "APPROVE";
|
|
} else {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${item.prefix}${item.firstName} ${item.lastName} ผู้ประเมินอนุมัติข้อตกลง`,
|
|
body: `${item.prefix}${item.firstName} ${item.lastName} ผู้ประเมินอนุมัติข้อตกลง`,
|
|
receiverUserId: item.commanderId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
item.evaluationStatus = "NEW_COMMANDER";
|
|
}
|
|
}
|
|
} else if (role == "COMMANDER") {
|
|
if (item.evaluationStatus == "NEW_COMMANDER") {
|
|
if (item.commanderHighId == null || item.commanderHighId == "") {
|
|
item.evaluationStatus = "APPROVE";
|
|
} else {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${item.prefix}${item.firstName} ${item.lastName} ผู้บังคับบัญชาเหนือขึ้นไปอนุมัติข้อตกลง`,
|
|
body: `${item.prefix}${item.firstName} ${item.lastName} ผู้บังคับบัญชาเหนือขึ้นไปอนุมัติข้อตกลง`,
|
|
receiverUserId: item.commanderHighId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
item.evaluationStatus = "NEW_COMMANDER_HIGH";
|
|
}
|
|
}
|
|
} else {
|
|
item.evaluationStatus = requestBody.status.trim().toUpperCase();
|
|
}
|
|
} else {
|
|
item.evaluationStatus = requestBody.status.trim().toUpperCase();
|
|
}
|
|
item.lastUpdateUserId = request.user.sub;
|
|
item.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(item);
|
|
});
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* API อนุมัติการขอแก้ไขแบบประเมินตามรายการที่เลือก
|
|
*
|
|
* @summary อนุมัติการขอแก้ไขแบบประเมินตามรายการที่เลือก
|
|
*
|
|
*
|
|
*/
|
|
@Post("admin/req-edit")
|
|
async RequestEdit(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Body()
|
|
requestBody: {
|
|
status: string;
|
|
id: string[];
|
|
},
|
|
) {
|
|
let profileId: any = null;
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
profileId = x.profileId;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
|
|
const list = await this.kpiUserEvalutionRepository.find({
|
|
where: { id: In(requestBody.id) },
|
|
});
|
|
if (!list || list.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
|
|
const hasAllData = requestBody.id.every((id) => list.some((item) => item.id === id));
|
|
|
|
if (!hasAllData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "พบบางไอดีผู้ประเมินที่ไม่มีข้อมูล");
|
|
}
|
|
|
|
list.forEach(async (item) => {
|
|
let role = "EVALUATOR";
|
|
if (profileId == item.commanderId) {
|
|
role = "COMMANDER";
|
|
} else if (profileId == item.commanderHighId) {
|
|
role = "COMMANDERHIGH";
|
|
}
|
|
if (requestBody.status.trim().toUpperCase() == "DONE") {
|
|
if (role == "EVALUATOR") {
|
|
if (item.evaluationReqEdit == "EVALUATOR") {
|
|
if (item.commanderId == null || item.commanderId == "") {
|
|
item.evaluationReqEdit = "DONE";
|
|
item.evaluationStatus = "NEW";
|
|
} else {
|
|
item.evaluationReqEdit = "COMMANDER";
|
|
}
|
|
}
|
|
} else if (role == "COMMANDER") {
|
|
if (item.evaluationReqEdit == "COMMANDER") {
|
|
if (item.commanderHighId == null || item.commanderHighId == "") {
|
|
item.evaluationReqEdit = "DONE";
|
|
item.evaluationStatus = "NEW";
|
|
} else {
|
|
item.evaluationReqEdit = "COMMANDER_HIGH";
|
|
}
|
|
}
|
|
} else {
|
|
item.evaluationReqEdit = requestBody.status.trim().toUpperCase();
|
|
item.evaluationStatus = "NEW";
|
|
}
|
|
} else {
|
|
item.evaluationReqEdit = requestBody.status.trim().toUpperCase();
|
|
}
|
|
|
|
item.lastUpdateUserId = request.user.sub;
|
|
item.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(item);
|
|
});
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสถานะผลการประเมิน
|
|
*
|
|
* @summary แก้ไขสถานะผลการประเมิน
|
|
*
|
|
*
|
|
*/
|
|
@Post("admin/result-status")
|
|
async ResultStatus(
|
|
@Request() request: { user: Record<string, any> },
|
|
@Body()
|
|
requestBody: {
|
|
status: string;
|
|
id: string[];
|
|
},
|
|
) {
|
|
let profileId: any = null;
|
|
await new CallAPI()
|
|
.GetData(request, "/org/profile/keycloak/position")
|
|
.then((x) => {
|
|
profileId = x.profileId;
|
|
})
|
|
.catch((x) => {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลในทะเบียนประวัติ");
|
|
});
|
|
|
|
const list = await this.kpiUserEvalutionRepository.find({
|
|
where: { id: In(requestBody.id) },
|
|
});
|
|
if (!list || list.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
|
|
const hasAllData = requestBody.id.every((id) => list.some((item) => item.id === id));
|
|
|
|
if (!hasAllData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "พบบางไอดีผู้ประเมินที่ไม่มีข้อมูล");
|
|
}
|
|
|
|
list.forEach(async (item) => {
|
|
let role = "EVALUATOR";
|
|
if (profileId == item.commanderId) {
|
|
role = "COMMANDER";
|
|
} else if (profileId == item.commanderHighId) {
|
|
role = "COMMANDERHIGH";
|
|
}
|
|
// if (requestBody.status.trim().toUpperCase() == "DONE") {
|
|
if (role == "EVALUATOR") {
|
|
if (item.evaluationStatus == "EVALUATING_EVALUATOR") {
|
|
if (item.commanderId == null || item.commanderId == "") {
|
|
item.evaluationStatus = "SUMMARY";
|
|
} else {
|
|
item.evaluationStatus = "EVALUATING_COMMANDER";
|
|
}
|
|
item.evaluationResults = requestBody.status.trim().toUpperCase();
|
|
}
|
|
} else if (role == "COMMANDER") {
|
|
if (item.evaluationStatus == "EVALUATING_COMMANDER") {
|
|
if (item.commanderHighId == null || item.commanderHighId == "") {
|
|
item.evaluationStatus = "SUMMARY";
|
|
} else {
|
|
item.evaluationStatus = "EVALUATING_COMMANDER_HIGH";
|
|
}
|
|
}
|
|
} else {
|
|
item.evaluationStatus = "SUMMARY";
|
|
}
|
|
// } else {
|
|
// // item.evaluationStatus = requestBody.status.trim().toUpperCase();
|
|
// }
|
|
item.lastUpdateUserId = request.user.sub;
|
|
item.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(item);
|
|
});
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
*
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Get("open/{id}")
|
|
async openKpiUserEvaluation(
|
|
@Path() id: string,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
kpiUserEvaluation.isOpen = true;
|
|
kpiUserEvaluation.openDate = new Date();
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสรุปผลการประเมิน (USER)
|
|
*
|
|
* @summary แก้ไขสรุปผลการประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("reason/user/{id}")
|
|
async updateReasonKpiUserEvaluation(
|
|
@Path() id: string,
|
|
@Body()
|
|
requestBody: {
|
|
topicEvaluator?: string | null;
|
|
developEvaluator?: string | null;
|
|
timeEvaluator?: string | null;
|
|
reasonEvaluator?: string | null;
|
|
},
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
const _null: any = null;
|
|
if (kpiUserEvaluation.commanderId == null) {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/keycloak", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
receiverUserId: "aec26ac3-417c-4cf9-9cbe-874939f99ecc",
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.evaluationStatus = "COMPLETE";
|
|
} else {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
receiverUserId: kpiUserEvaluation.commanderId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.evaluationStatus = "SUMMARY_COMMANDER";
|
|
}
|
|
kpiUserEvaluation.topicEvaluator =
|
|
requestBody.topicEvaluator == null ? _null : requestBody.topicEvaluator;
|
|
kpiUserEvaluation.developEvaluator =
|
|
requestBody.developEvaluator == null ? _null : requestBody.developEvaluator;
|
|
kpiUserEvaluation.timeEvaluator =
|
|
requestBody.timeEvaluator == null ? _null : requestBody.timeEvaluator;
|
|
kpiUserEvaluation.reasonEvaluator =
|
|
requestBody.reasonEvaluator == null ? _null : requestBody.reasonEvaluator;
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสรุปผลการประเมินผู้บังคับบัญชาเหนือขึ้นไป (USER)
|
|
*
|
|
* @summary แก้ไขสรุปผลการประเมินผู้บังคับบัญชาเหนือขึ้นไป (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("reason/commander/{id}")
|
|
async updateReasonKpiCommanderEvaluation(
|
|
@Path() id: string,
|
|
@Body()
|
|
requestBody: {
|
|
isReason: boolean;
|
|
reason?: string | null;
|
|
},
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
const _null: any = null;
|
|
if (kpiUserEvaluation.commanderHighId == null) {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/keycloak", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
receiverUserId: "aec26ac3-417c-4cf9-9cbe-874939f99ecc",
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.evaluationStatus = "COMPLETE";
|
|
} else {
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
receiverUserId: kpiUserEvaluation.commanderHighId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.evaluationStatus = "SUMMARY_COMMANDER_HIGH";
|
|
}
|
|
kpiUserEvaluation.isReasonCommander = requestBody.isReason;
|
|
kpiUserEvaluation.reasonCommander = requestBody.reason == null ? _null : requestBody.reason;
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
|
|
/**
|
|
* API แก้ไขสรุปผลการประเมินผู้บังคับบัญชาเหนือขึ้นไปอีกหนึ่งขั้น (USER)
|
|
*
|
|
* @summary แก้ไขสรุปผลการประเมินผู้บังคับบัญชาเหนือขึ้นไปอีกหนึ่งขั้น (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Put("reason/commanderHigh/{id}")
|
|
async updateReasonKpiCommanderHighEvaluation(
|
|
@Path() id: string,
|
|
@Body()
|
|
requestBody: {
|
|
isReason: boolean;
|
|
reason?: string | null;
|
|
},
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
const _null: any = null;
|
|
kpiUserEvaluation.evaluationStatus = "COMPLETE";
|
|
await new CallAPI()
|
|
.PostData(request, "/placement/noti/keycloak", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินแสดงความเห็น`,
|
|
receiverUserId: "aec26ac3-417c-4cf9-9cbe-874939f99ecc",
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.isReasonCommanderHigh = requestBody.isReason;
|
|
kpiUserEvaluation.reasonCommanderHigh = requestBody.reason == null ? _null : requestBody.reason;
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation.id);
|
|
}
|
|
/**
|
|
* API บันทึกข้อมูลลง kp7 (USER)
|
|
*
|
|
* @summary บันทึกข้อมูลลง kp7 (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Post("done/kp7")
|
|
async updateKpiEvaluationTokp7(
|
|
@Body()
|
|
requestBody: {
|
|
id: string[];
|
|
},
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluations = await this.kpiUserEvalutionRepository.find({
|
|
where: { id: In(requestBody.id) },
|
|
});
|
|
|
|
Promise.all(
|
|
kpiUserEvaluations.map(async (kpiUserEvaluation) => {
|
|
kpiUserEvaluation.evaluationStatus = "KP7";
|
|
new CallAPI()
|
|
.PostData(request, "/org/profile/assessments", {
|
|
date: new Date(),
|
|
name: kpiUserEvaluation.evaluationResults,
|
|
point1Total: kpiUserEvaluation.weightPoint1,
|
|
point1: kpiUserEvaluation.totalPoint1,
|
|
point2Total: kpiUserEvaluation.weightPoint2,
|
|
point2: kpiUserEvaluation.totalPoint2_1 + kpiUserEvaluation.totalPoint2_2,
|
|
pointSumTotal: kpiUserEvaluation.summaryWeight,
|
|
pointSum: kpiUserEvaluation.summaryPoint,
|
|
profileId: kpiUserEvaluation.profileId,
|
|
})
|
|
.then(async (x) => {});
|
|
new CallAPI()
|
|
.PostData(request, "/placement/noti/profile", {
|
|
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ระดับผลการประเมินการปฏิบัติราชการระดับบุคคลของคุณอยู่ในเกณฑ์ ${kpiUserEvaluation.summaryPoint}`,
|
|
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ระดับผลการประเมินการปฏิบัติราชการระดับบุคคลของคุณอยู่ในเกณฑ์ ${kpiUserEvaluation.summaryPoint}`,
|
|
receiverUserId: kpiUserEvaluation.profileId,
|
|
payload: "",
|
|
isSendMail: true,
|
|
isSendInbox: true,
|
|
isSendNotification: true,
|
|
})
|
|
.then((x) => {})
|
|
.catch((x) => {});
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
}),
|
|
);
|
|
|
|
return new HttpSuccess();
|
|
}
|
|
|
|
/**
|
|
* API รายละเอียดสรุปผลการประเมิน (USER)
|
|
*
|
|
* @summary รายละเอียดสรุปผลการประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Get("reason/{id}")
|
|
async getReasonKpiEvaluation(
|
|
@Path() id: string,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
select: [
|
|
"topicEvaluator",
|
|
"developEvaluator",
|
|
"timeEvaluator",
|
|
"reasonEvaluator",
|
|
"isReasonCommander",
|
|
"reasonCommander",
|
|
"isReasonCommanderHigh",
|
|
"reasonCommanderHigh",
|
|
|
|
"plannedPoint",
|
|
"rolePoint",
|
|
"specialPoint",
|
|
"capacityPoint",
|
|
|
|
"totalPoint1",
|
|
"totalPoint2_1",
|
|
"totalPoint2_2",
|
|
"summaryPoint",
|
|
|
|
"weightPoint1",
|
|
"weightPoint2",
|
|
"summaryWeight",
|
|
|
|
"evaluationResults",
|
|
|
|
"isOpen",
|
|
],
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
return new HttpSuccess(kpiUserEvaluation);
|
|
}
|
|
|
|
/**
|
|
* API รายละเอียดสรุปผลการประเมิน (USER)
|
|
*
|
|
* @summary รายละเอียดสรุปผลการประเมิน (USER)
|
|
*
|
|
* @param {string} id Guid, *Id คนประเมิน (USER)
|
|
*/
|
|
@Get("summary/{id}")
|
|
async getSummaryKpiEvaluation(
|
|
@Path() id: string,
|
|
@Request() request: { user: Record<string, any> },
|
|
) {
|
|
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
|
|
where: { id: id },
|
|
select: ["id", "evaluationStatus", "lastUpdateUserId", "lastUpdateFullName"],
|
|
});
|
|
if (!kpiUserEvaluation) {
|
|
throw new HttpError(
|
|
HttpStatusCode.NOT_FOUND,
|
|
"ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้",
|
|
);
|
|
}
|
|
kpiUserEvaluation.evaluationStatus = "SUMMARY";
|
|
kpiUserEvaluation.lastUpdateUserId = request.user.sub;
|
|
kpiUserEvaluation.lastUpdateFullName = request.user.name;
|
|
await this.kpiUserEvalutionRepository.save(kpiUserEvaluation);
|
|
return new HttpSuccess(kpiUserEvaluation);
|
|
}
|
|
}
|