2024-09-05 13:59:43 +07:00
|
|
|
import {
|
|
|
|
|
Controller,
|
|
|
|
|
Route,
|
|
|
|
|
Security,
|
|
|
|
|
Tags,
|
|
|
|
|
Request,
|
|
|
|
|
SuccessResponse,
|
|
|
|
|
Response,
|
|
|
|
|
Get,
|
|
|
|
|
Post,
|
|
|
|
|
Body,
|
|
|
|
|
Query,
|
|
|
|
|
Put,
|
|
|
|
|
} from "tsoa";
|
|
|
|
|
import HttpSuccess from "../interfaces/http-success";
|
|
|
|
|
import HttpStatusCode from "../interfaces/http-status";
|
|
|
|
|
import { RequestWithUser } from "../middlewares/user";
|
|
|
|
|
import { findEndDate, setLogDataDiff } from "../interfaces/utils";
|
|
|
|
|
import { AppDataSource } from "../database/data-source";
|
|
|
|
|
import { AssignDirector } from "../entities/AssignDirector";
|
|
|
|
|
import HttpError from "../interfaces/http-error";
|
|
|
|
|
import { Assign } from "../entities/Assign";
|
|
|
|
|
import { Personal } from "../entities/Personal";
|
|
|
|
|
import { AssignOutput } from "../entities/AssignOutput";
|
2024-09-05 16:56:22 +07:00
|
|
|
import { CreateEvaluateAssessor, EvaluateAssessor } from "../entities/EvaluateAssessor";
|
|
|
|
|
import { CreateEvaluateAchievement, EvaluateAchievement } from "../entities/EvaluateAchievement";
|
2024-09-05 13:59:43 +07:00
|
|
|
import CallAPI from "../interfaces/call-api";
|
2024-09-06 15:17:42 +07:00
|
|
|
import permission from "../interfaces/permission";
|
2024-09-05 16:56:22 +07:00
|
|
|
@Route("api/v1/probation/evaluate-record")
|
2024-09-05 13:59:43 +07:00
|
|
|
@Tags("แบบบันทึกผล")
|
|
|
|
|
@Security("bearerAuth")
|
|
|
|
|
@Response(
|
|
|
|
|
HttpStatusCode.INTERNAL_SERVER_ERROR,
|
2024-09-05 16:56:22 +07:00
|
|
|
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
|
2024-09-05 13:59:43 +07:00
|
|
|
)
|
|
|
|
|
export class EvaluateRecordController extends Controller {
|
2024-09-05 16:56:22 +07:00
|
|
|
private assignDirectorRepository = AppDataSource.getRepository(AssignDirector);
|
2024-09-05 13:59:43 +07:00
|
|
|
private assignRepository = AppDataSource.getRepository(Assign);
|
|
|
|
|
private personalRepository = AppDataSource.getRepository(Personal);
|
|
|
|
|
private assignOutputRepository = AppDataSource.getRepository(AssignOutput);
|
2024-09-05 16:56:22 +07:00
|
|
|
private evaluateAssessorRepository = AppDataSource.getRepository(EvaluateAssessor);
|
|
|
|
|
private evaluateAchievementRepository = AppDataSource.getRepository(EvaluateAchievement);
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล
|
|
|
|
|
*
|
|
|
|
|
* @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Get("create")
|
2024-09-06 15:17:42 +07:00
|
|
|
async GetCreate(@Query() assign_id: string, @Request() request: RequestWithUser) {
|
|
|
|
|
await new permission().PermissionGet(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const directorData = await this.assignDirectorRepository.findOne({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "mentor",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!directorData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director = await {
|
|
|
|
|
...directorData,
|
|
|
|
|
name: directorData.fullname,
|
|
|
|
|
label: `${directorData.fullname} (${directorData.position}, ${directorData.posType}: ${directorData.posLevel})`,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
id: assign_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const profileData = await this.personalRepository.findOne({
|
|
|
|
|
select: [
|
|
|
|
|
"personal_id",
|
|
|
|
|
"prefixName",
|
|
|
|
|
"firstName",
|
|
|
|
|
"lastName",
|
|
|
|
|
"positionName",
|
|
|
|
|
"positionLevelName",
|
|
|
|
|
"organization",
|
|
|
|
|
],
|
|
|
|
|
where: {
|
|
|
|
|
personal_id: assign.personal_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!profileData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const profile = await {
|
|
|
|
|
id: profileData.personal_id,
|
2024-09-05 16:56:22 +07:00
|
|
|
name: profileData.prefixName + profileData.firstName + " " + profileData.lastName,
|
2024-09-05 13:59:43 +07:00
|
|
|
positionName: profileData.positionName,
|
|
|
|
|
positionLevelName: profileData.positionLevelName,
|
|
|
|
|
Oc: profileData.organization,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const output = await this.assignOutputRepository.find({
|
|
|
|
|
select: ["id", "output_desc"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
},
|
|
|
|
|
order: { id: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const evaluate_amount = await this.evaluateAssessorRepository.count({
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
director_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const evaluate_no = await (evaluate_amount + 1);
|
|
|
|
|
const start_date = await (evaluate_amount == 0
|
|
|
|
|
? assign.date_start
|
|
|
|
|
: findEndDate(evaluate_amount * 2, assign.date_start));
|
|
|
|
|
|
|
|
|
|
var commanderData = await this.assignDirectorRepository.findOne({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: { personal_id: director_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!commanderData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const commander = await {
|
|
|
|
|
...commanderData,
|
|
|
|
|
name: commanderData.fullname,
|
|
|
|
|
label: `${commanderData.fullname} (${commanderData.position}, ${commanderData.posType}: ${commanderData.posLevel})`,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess({
|
|
|
|
|
person: profile,
|
|
|
|
|
assign,
|
|
|
|
|
assign_output: output,
|
|
|
|
|
evaluate_no,
|
|
|
|
|
start_date,
|
|
|
|
|
end_date: findEndDate(2, start_date),
|
|
|
|
|
director: commander,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API ข้อมูลแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
* @summary ข้อมูลแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Get("")
|
2024-09-06 15:17:42 +07:00
|
|
|
async GetData(
|
|
|
|
|
@Request() request: RequestWithUser,
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Query() evaluate_no?: string,
|
|
|
|
|
) {
|
|
|
|
|
await new permission().PermissionGet(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "mentor",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
let evaluate: any = null;
|
|
|
|
|
let evaluateData: any = [];
|
|
|
|
|
if (evaluate_no) {
|
|
|
|
|
evaluate = await this.evaluateAssessorRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
director_id,
|
|
|
|
|
assign_id,
|
|
|
|
|
no: evaluate_no,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: {
|
|
|
|
|
evaluate_id: evaluate.id,
|
|
|
|
|
},
|
|
|
|
|
order: { output_id: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
if (!achievementData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const achievements = await achievementData.map((achievement) => {
|
|
|
|
|
return {
|
|
|
|
|
...achievement,
|
|
|
|
|
evaluate_expect_desc: achievement.output_desc,
|
|
|
|
|
evaluate_output_desc: achievement.output_desc,
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
evaluateData = await {
|
|
|
|
|
id: evaluate.id,
|
|
|
|
|
director_id: evaluate.director_id,
|
|
|
|
|
assign_id,
|
2024-09-06 14:38:37 +07:00
|
|
|
no: Number(evaluate.no),
|
2024-09-05 13:59:43 +07:00
|
|
|
date_start: evaluate.date_start,
|
|
|
|
|
date_finish: evaluate.date_finish,
|
|
|
|
|
assessor_dated: evaluate.assessor_dated,
|
|
|
|
|
knowledge_level: evaluate.knowledge_level,
|
|
|
|
|
skill_level: evaluate.skill_level,
|
|
|
|
|
competency_level: evaluate.competency_level,
|
|
|
|
|
learn_level: evaluate.learn_level,
|
|
|
|
|
apply_level: evaluate.apply_level,
|
|
|
|
|
achievement_other_desc: evaluate.achievement_other_desc,
|
|
|
|
|
achievement_other_level: evaluate.achievement_other_level,
|
|
|
|
|
achievement_strength_desc: evaluate.achievement_strength_desc,
|
|
|
|
|
achievement_improve_desc: evaluate.achievement_improve_desc,
|
|
|
|
|
conduct1_level: evaluate.conduct1_level,
|
|
|
|
|
conduct2_level: evaluate.conduct2_level,
|
|
|
|
|
conduct3_level: evaluate.conduct3_level,
|
|
|
|
|
conduct4_level: evaluate.conduct4_level,
|
|
|
|
|
moral1_level: evaluate.moral1_level,
|
|
|
|
|
moral2_level: evaluate.moral2_level,
|
|
|
|
|
moral3_level: evaluate.moral3_level,
|
|
|
|
|
discipline1_level: evaluate.discipline1_level,
|
|
|
|
|
discipline2_level: evaluate.discipline2_level,
|
|
|
|
|
discipline3_level: evaluate.discipline3_level,
|
|
|
|
|
discipline4_level: evaluate.discipline4_level,
|
|
|
|
|
discipline5_level: evaluate.discipline5_level,
|
|
|
|
|
behavior_other_desc: evaluate.behavior_other_desc,
|
|
|
|
|
behavior_other_level: evaluate.behavior_other_level,
|
|
|
|
|
behavior_strength_desc: evaluate.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: evaluate.behavior_improve_desc,
|
|
|
|
|
orientation: evaluate.orientation,
|
|
|
|
|
self_learning: evaluate.self_learning,
|
|
|
|
|
training_seminar: evaluate.training_seminar,
|
|
|
|
|
other_training: evaluate.other_training,
|
|
|
|
|
createdAt: evaluate.createdAt,
|
|
|
|
|
updatedAt: evaluate.updatedAt,
|
|
|
|
|
achievements: achievements,
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
evaluate = await this.evaluateAssessorRepository.find({
|
|
|
|
|
where: {
|
|
|
|
|
director_id: director_id,
|
|
|
|
|
assign_id,
|
|
|
|
|
},
|
|
|
|
|
order: { no: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await Promise.all(
|
|
|
|
|
evaluate.map(async (element: any, index: number) => {
|
2024-09-05 16:56:22 +07:00
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
|
|
|
|
select: [
|
|
|
|
|
"output_desc",
|
|
|
|
|
"evaluate_expect_level",
|
|
|
|
|
"output_desc",
|
|
|
|
|
"evaluate_output_level",
|
|
|
|
|
],
|
|
|
|
|
where: {
|
|
|
|
|
evaluate_id: element.id,
|
|
|
|
|
},
|
|
|
|
|
order: { output_id: "ASC" },
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
const achievements = await achievementData.map((achievement) => {
|
|
|
|
|
return {
|
|
|
|
|
...achievement,
|
|
|
|
|
evaluate_expect_desc: achievement.output_desc,
|
|
|
|
|
evaluate_output_desc: achievement.output_desc,
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
evaluateData[index] = await {
|
|
|
|
|
id: element.id,
|
|
|
|
|
director_id: element.director_id,
|
|
|
|
|
assign_id,
|
2024-09-06 14:38:37 +07:00
|
|
|
no: Number(element.no),
|
2024-09-05 13:59:43 +07:00
|
|
|
date_start: element.date_start,
|
|
|
|
|
date_finish: element.date_finish,
|
|
|
|
|
assessor_dated: element.assessor_dated,
|
|
|
|
|
knowledge_level: element.knowledge_level,
|
|
|
|
|
skill_level: element.skill_level,
|
|
|
|
|
competency_level: element.competency_level,
|
|
|
|
|
learn_level: element.learn_level,
|
|
|
|
|
apply_level: element.apply_level,
|
|
|
|
|
achievement_other_desc: element.achievement_other_desc,
|
|
|
|
|
achievement_other_level: element.achievement_other_level,
|
|
|
|
|
achievement_strength_desc: element.achievement_strength_desc,
|
|
|
|
|
achievement_improve_desc: element.achievement_improve_desc,
|
|
|
|
|
conduct1_level: element.conduct1_level,
|
|
|
|
|
conduct2_level: element.conduct2_level,
|
|
|
|
|
conduct3_level: element.conduct3_level,
|
|
|
|
|
conduct4_level: element.conduct4_level,
|
|
|
|
|
moral1_level: element.moral1_level,
|
|
|
|
|
moral2_level: element.moral2_level,
|
|
|
|
|
moral3_level: element.moral3_level,
|
|
|
|
|
discipline1_level: element.discipline1_level,
|
|
|
|
|
discipline2_level: element.discipline2_level,
|
|
|
|
|
discipline3_level: element.discipline3_level,
|
|
|
|
|
discipline4_level: element.discipline4_level,
|
|
|
|
|
discipline5_level: element.discipline5_level,
|
|
|
|
|
behavior_other_desc: element.behavior_other_desc,
|
|
|
|
|
behavior_other_level: element.behavior_other_level,
|
|
|
|
|
behavior_strength_desc: element.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: element.behavior_improve_desc,
|
|
|
|
|
orientation: element.orientation,
|
|
|
|
|
self_learning: element.self_learning,
|
|
|
|
|
training_seminar: element.training_seminar,
|
|
|
|
|
other_training: element.other_training,
|
|
|
|
|
createdAt: element.createdAt,
|
|
|
|
|
updatedAt: element.updatedAt,
|
|
|
|
|
achievements: achievements,
|
|
|
|
|
};
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
id: assign_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const experimenteeData = await this.personalRepository.find({
|
|
|
|
|
select: [
|
|
|
|
|
"personal_id",
|
|
|
|
|
"prefixName",
|
|
|
|
|
"firstName",
|
|
|
|
|
"lastName",
|
|
|
|
|
"positionName",
|
|
|
|
|
"positionLevelName",
|
|
|
|
|
"organization",
|
|
|
|
|
],
|
|
|
|
|
where: { personal_id: assign.personal_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const experimentee = await experimenteeData.map((element) => ({
|
|
|
|
|
...element,
|
|
|
|
|
name: element.prefixName + element.firstName + " " + element.lastName,
|
|
|
|
|
Oc: element.organization,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
const directorData = await this.assignDirectorRepository.find({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: { personal_id: director_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const directors = await directorData.map((element) => ({
|
|
|
|
|
...element,
|
|
|
|
|
name: element.fullname,
|
|
|
|
|
label: `${element.fullname} (${element.position}, ${element.posType}: ${element.posLevel})`,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess({
|
|
|
|
|
experimentee: experimentee ? experimentee : null,
|
|
|
|
|
director: directors ? directors : null,
|
|
|
|
|
assign,
|
|
|
|
|
evaluate: evaluateData,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API เพิ่มแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
* @summary เพิ่มแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Post("")
|
|
|
|
|
async PostData(
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Body() requestBody: CreateEvaluateAssessor,
|
2024-09-05 16:56:22 +07:00
|
|
|
@Request() request: RequestWithUser,
|
2024-09-05 13:59:43 +07:00
|
|
|
) {
|
2024-09-06 15:17:42 +07:00
|
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "mentor",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
relations: ["profile"],
|
|
|
|
|
where: { id: assign_id },
|
|
|
|
|
});
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const postData: any = await {
|
|
|
|
|
assign_id,
|
|
|
|
|
...requestBody,
|
|
|
|
|
director_id,
|
|
|
|
|
no: requestBody.evaluate_no,
|
|
|
|
|
date_start: requestBody.start_date,
|
|
|
|
|
personal_id: assign.personal_id,
|
|
|
|
|
|
|
|
|
|
achievement_other_desc: requestBody.achievement_other
|
|
|
|
|
? requestBody.achievement_other.text
|
|
|
|
|
: "",
|
|
|
|
|
achievement_other_level: requestBody.achievement_other
|
|
|
|
|
? Number(requestBody.achievement_other.level)
|
|
|
|
|
: 0,
|
|
|
|
|
behavior_other_desc: requestBody.behavio_orther.text,
|
|
|
|
|
behavior_other_level:
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0,
|
2024-09-05 13:59:43 +07:00
|
|
|
behavior_strength_desc: requestBody.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: requestBody.behavior_improve_desc,
|
|
|
|
|
orientation: requestBody.orientation,
|
|
|
|
|
self_learning: requestBody.self_learning,
|
|
|
|
|
training_seminar: requestBody.training_seminar,
|
|
|
|
|
other_training: requestBody.other_training,
|
|
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
|
2024-09-05 16:56:22 +07:00
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
if (evaluateAssessor) {
|
|
|
|
|
await Promise.all(
|
|
|
|
|
requestBody.evaluate_expenct_level.map(async (expenct, index) => {
|
|
|
|
|
const evaluateAchievement: CreateEvaluateAchievement = await {
|
|
|
|
|
evaluate_id: evaluateAssessor.id,
|
|
|
|
|
assign_id,
|
|
|
|
|
output_id: expenct.id.toString(),
|
|
|
|
|
|
|
|
|
|
assessor_id: director_id,
|
|
|
|
|
evaluate_expect_level: Number(expenct.level),
|
|
|
|
|
output_desc: requestBody.evaluate_ouptut[index].text,
|
2024-09-05 16:56:22 +07:00
|
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
2024-09-05 13:59:43 +07:00
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setLogDataDiff(request, { before: null, after: postData });
|
|
|
|
|
|
|
|
|
|
if (Number(requestBody.evaluate_no) < 3) {
|
|
|
|
|
// #noted cronjob
|
|
|
|
|
// แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง
|
|
|
|
|
const dateSaveForm = await findEndDate(2, requestBody.start_date);
|
|
|
|
|
const nextNo = await (Number(requestBody.evaluate_no) + 1);
|
|
|
|
|
await new CallAPI()
|
|
|
|
|
.PostData(request, "/placement/noti", {
|
|
|
|
|
subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`,
|
|
|
|
|
body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`,
|
|
|
|
|
receiverUserId: director_id,
|
|
|
|
|
payload: "",
|
|
|
|
|
isSendMail: true,
|
|
|
|
|
isSendInbox: true,
|
|
|
|
|
receiveDate: dateSaveForm,
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
console.error("Error calling API:", error);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
* @summary แก้ไขข้อมูลแบบบันทึกผล(ผู้ดูแล)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Put("")
|
|
|
|
|
async UpdateData(
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Query() evaluate_id: string,
|
|
|
|
|
@Body() requestBody: CreateEvaluateAssessor,
|
2024-09-05 16:56:22 +07:00
|
|
|
@Request() request: RequestWithUser,
|
2024-09-05 13:59:43 +07:00
|
|
|
) {
|
2024-09-06 15:17:42 +07:00
|
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "mentor",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
let evaluate = await this.evaluateAssessorRepository.findOne({
|
|
|
|
|
where: { id: evaluate_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const before = evaluate;
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
evaluate.assessor_dated = requestBody.assessor_dated;
|
|
|
|
|
evaluate.knowledge_level = requestBody.knowledge_level;
|
|
|
|
|
evaluate.skill_level = requestBody.skill_level;
|
|
|
|
|
evaluate.competency_level = requestBody.competency_level;
|
|
|
|
|
evaluate.learn_level = requestBody.learn_level;
|
|
|
|
|
evaluate.apply_level = requestBody.apply_level;
|
|
|
|
|
evaluate.achievement_other_desc = requestBody.achievement_other
|
|
|
|
|
? requestBody.achievement_other.text
|
|
|
|
|
: "";
|
|
|
|
|
evaluate.achievement_other_level =
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0;
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
evaluate.achievement_strength_desc = requestBody.achievement_strength_desc;
|
|
|
|
|
evaluate.achievement_improve_desc = requestBody.achievement_improve_desc;
|
|
|
|
|
evaluate.conduct1_level = requestBody.conduct1_level;
|
|
|
|
|
evaluate.conduct2_level = requestBody.conduct2_level;
|
|
|
|
|
evaluate.conduct3_level = requestBody.conduct3_level;
|
|
|
|
|
evaluate.conduct4_level = requestBody.conduct4_level;
|
|
|
|
|
evaluate.moral1_level = requestBody.moral1_level;
|
|
|
|
|
evaluate.moral2_level = requestBody.moral2_level;
|
|
|
|
|
evaluate.moral3_level = requestBody.moral3_level;
|
|
|
|
|
evaluate.discipline1_level = requestBody.discipline1_level;
|
|
|
|
|
evaluate.discipline2_level = requestBody.discipline2_level;
|
|
|
|
|
evaluate.discipline3_level = requestBody.discipline3_level;
|
|
|
|
|
evaluate.discipline4_level = requestBody.discipline4_level;
|
|
|
|
|
evaluate.discipline5_level = requestBody.discipline5_level;
|
|
|
|
|
evaluate.behavior_other_desc = requestBody.behavio_orther.text;
|
|
|
|
|
evaluate.behavior_other_level =
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0;
|
2024-09-05 13:59:43 +07:00
|
|
|
evaluate.behavior_strength_desc = requestBody.behavior_strength_desc;
|
|
|
|
|
evaluate.behavior_improve_desc = requestBody.behavior_improve_desc;
|
|
|
|
|
evaluate.orientation = requestBody.orientation;
|
|
|
|
|
evaluate.self_learning = requestBody.self_learning;
|
|
|
|
|
evaluate.training_seminar = requestBody.training_seminar;
|
|
|
|
|
evaluate.other_training = requestBody.other_training;
|
|
|
|
|
evaluate.updateUserId = request.user.sub;
|
|
|
|
|
evaluate.updateFullName = request.user.name;
|
|
|
|
|
|
2024-09-05 16:56:22 +07:00
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
if (evaluateAssessor) {
|
|
|
|
|
await this.evaluateAchievementRepository.delete({
|
|
|
|
|
evaluate_id,
|
|
|
|
|
});
|
|
|
|
|
await Promise.all(
|
|
|
|
|
requestBody.evaluate_expenct_level.map(async (expenct, index) => {
|
|
|
|
|
const evaluateAchievement: CreateEvaluateAchievement = await {
|
|
|
|
|
evaluate_id: evaluateAssessor.id,
|
|
|
|
|
assign_id,
|
|
|
|
|
output_id: expenct.id.toString(),
|
|
|
|
|
assessor_id: director_id,
|
|
|
|
|
evaluate_expect_level: Number(expenct.level),
|
|
|
|
|
output_desc: requestBody.evaluate_ouptut[index].text,
|
2024-09-05 16:56:22 +07:00
|
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
2024-09-05 13:59:43 +07:00
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setLogDataDiff(request, { before, after: evaluate });
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
* @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Get("create/commander")
|
2024-09-06 15:17:42 +07:00
|
|
|
async GetCreateCommander(@Query() assign_id: string, @Request() request: RequestWithUser) {
|
|
|
|
|
await new permission().PermissionGet(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const directorData = await this.assignDirectorRepository.findOne({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "commander",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!directorData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director = await {
|
|
|
|
|
...directorData,
|
|
|
|
|
name: directorData.fullname,
|
|
|
|
|
label: `${directorData.fullname} (${directorData.position}, ${directorData.posType}: ${directorData.posLevel})`,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
id: assign_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const profileData = await this.personalRepository.findOne({
|
|
|
|
|
select: [
|
|
|
|
|
"personal_id",
|
|
|
|
|
"prefixName",
|
|
|
|
|
"firstName",
|
|
|
|
|
"lastName",
|
|
|
|
|
"positionName",
|
|
|
|
|
"positionLevelName",
|
|
|
|
|
"organization",
|
|
|
|
|
],
|
|
|
|
|
where: {
|
|
|
|
|
personal_id: assign.personal_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!profileData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const profile = await {
|
|
|
|
|
id: profileData.personal_id,
|
2024-09-05 16:56:22 +07:00
|
|
|
name: profileData.prefixName + profileData.firstName + " " + profileData.lastName,
|
2024-09-05 13:59:43 +07:00
|
|
|
positionName: profileData.positionName,
|
|
|
|
|
positionLevelName: profileData.positionLevelName,
|
|
|
|
|
Oc: profileData.organization,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const output = await this.assignOutputRepository.find({
|
|
|
|
|
select: ["id", "output_desc"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
},
|
|
|
|
|
order: { id: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const evaluate_amount = await this.evaluateAssessorRepository.count({
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
director_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const evaluate_no = await (evaluate_amount + 1);
|
|
|
|
|
const start_date = await (evaluate_amount == 0
|
|
|
|
|
? assign.date_start
|
|
|
|
|
: findEndDate(evaluate_amount * 2, assign.date_start));
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess({
|
|
|
|
|
person: profile,
|
|
|
|
|
assign,
|
|
|
|
|
assign_output: output,
|
|
|
|
|
evaluate_no,
|
|
|
|
|
start_date,
|
|
|
|
|
end_date: findEndDate(2, start_date),
|
|
|
|
|
director,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
* @summary ข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Get("commander")
|
2024-09-06 15:17:42 +07:00
|
|
|
async GetDataCommander(
|
|
|
|
|
@Request() request: RequestWithUser,
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Query() evaluate_no?: string,
|
|
|
|
|
) {
|
|
|
|
|
await new permission().PermissionGet(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "commander",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
let evaluate: any = null;
|
|
|
|
|
let evaluateData: any = [];
|
|
|
|
|
if (evaluate_no) {
|
|
|
|
|
evaluate = await this.evaluateAssessorRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
director_id,
|
|
|
|
|
assign_id,
|
|
|
|
|
no: evaluate_no,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: {
|
|
|
|
|
evaluate_id: evaluate.id,
|
|
|
|
|
},
|
|
|
|
|
order: { output_id: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
if (!achievementData) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const achievements = await achievementData.map((achievement) => {
|
|
|
|
|
return {
|
|
|
|
|
...achievement,
|
|
|
|
|
evaluate_expect_desc: achievement.output_desc,
|
|
|
|
|
evaluate_output_desc: achievement.output_desc,
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
evaluateData = await {
|
|
|
|
|
id: evaluate.id,
|
|
|
|
|
director_id: evaluate.director_id,
|
|
|
|
|
assign_id,
|
2024-09-06 14:38:37 +07:00
|
|
|
no: Number(evaluate.no),
|
2024-09-05 13:59:43 +07:00
|
|
|
date_start: evaluate.date_start,
|
|
|
|
|
date_finish: evaluate.date_finish,
|
|
|
|
|
assessor_dated: evaluate.assessor_dated,
|
|
|
|
|
knowledge_level: evaluate.knowledge_level,
|
|
|
|
|
skill_level: evaluate.skill_level,
|
|
|
|
|
competency_level: evaluate.competency_level,
|
|
|
|
|
learn_level: evaluate.learn_level,
|
|
|
|
|
apply_level: evaluate.apply_level,
|
|
|
|
|
achievement_other_desc: evaluate.achievement_other_desc,
|
|
|
|
|
achievement_other_level: evaluate.achievement_other_level,
|
|
|
|
|
achievement_strength_desc: evaluate.achievement_strength_desc,
|
|
|
|
|
achievement_improve_desc: evaluate.achievement_improve_desc,
|
|
|
|
|
conduct1_level: evaluate.conduct1_level,
|
|
|
|
|
conduct2_level: evaluate.conduct2_level,
|
|
|
|
|
conduct3_level: evaluate.conduct3_level,
|
|
|
|
|
conduct4_level: evaluate.conduct4_level,
|
|
|
|
|
moral1_level: evaluate.moral1_level,
|
|
|
|
|
moral2_level: evaluate.moral2_level,
|
|
|
|
|
moral3_level: evaluate.moral3_level,
|
|
|
|
|
discipline1_level: evaluate.discipline1_level,
|
|
|
|
|
discipline2_level: evaluate.discipline2_level,
|
|
|
|
|
discipline3_level: evaluate.discipline3_level,
|
|
|
|
|
discipline4_level: evaluate.discipline4_level,
|
|
|
|
|
discipline5_level: evaluate.discipline5_level,
|
|
|
|
|
behavior_other_desc: evaluate.behavior_other_desc,
|
|
|
|
|
behavior_other_level: evaluate.behavior_other_level,
|
|
|
|
|
behavior_strength_desc: evaluate.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: evaluate.behavior_improve_desc,
|
|
|
|
|
orientation: evaluate.orientation,
|
|
|
|
|
self_learning: evaluate.self_learning,
|
|
|
|
|
training_seminar: evaluate.training_seminar,
|
|
|
|
|
other_training: evaluate.other_training,
|
|
|
|
|
createdAt: evaluate.createdAt,
|
|
|
|
|
updatedAt: evaluate.updatedAt,
|
|
|
|
|
achievements: achievements,
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
evaluate = await this.evaluateAssessorRepository.find({
|
|
|
|
|
where: {
|
|
|
|
|
director_id: director_id,
|
|
|
|
|
assign_id,
|
|
|
|
|
},
|
|
|
|
|
order: { no: "ASC" },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await Promise.all(
|
|
|
|
|
evaluate.map(async (element: any, index: number) => {
|
2024-09-05 16:56:22 +07:00
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
|
|
|
|
select: [
|
|
|
|
|
"output_desc",
|
|
|
|
|
"evaluate_expect_level",
|
|
|
|
|
"output_desc",
|
|
|
|
|
"evaluate_output_level",
|
|
|
|
|
],
|
|
|
|
|
where: {
|
|
|
|
|
evaluate_id: element.id,
|
|
|
|
|
},
|
|
|
|
|
order: { output_id: "ASC" },
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
const achievements = await achievementData.map((achievement) => {
|
|
|
|
|
return {
|
|
|
|
|
...achievement,
|
|
|
|
|
evaluate_expect_desc: achievement.output_desc,
|
|
|
|
|
evaluate_output_desc: achievement.output_desc,
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
evaluateData[index] = await {
|
|
|
|
|
id: element.id,
|
|
|
|
|
director_id: element.director_id,
|
|
|
|
|
assign_id,
|
2024-09-06 14:38:37 +07:00
|
|
|
no: Number(element.no),
|
2024-09-05 13:59:43 +07:00
|
|
|
date_start: element.date_start,
|
|
|
|
|
date_finish: element.date_finish,
|
|
|
|
|
assessor_dated: element.assessor_dated,
|
|
|
|
|
knowledge_level: element.knowledge_level,
|
|
|
|
|
skill_level: element.skill_level,
|
|
|
|
|
competency_level: element.competency_level,
|
|
|
|
|
learn_level: element.learn_level,
|
|
|
|
|
apply_level: element.apply_level,
|
|
|
|
|
achievement_other_desc: element.achievement_other_desc,
|
|
|
|
|
achievement_other_level: element.achievement_other_level,
|
|
|
|
|
achievement_strength_desc: element.achievement_strength_desc,
|
|
|
|
|
achievement_improve_desc: element.achievement_improve_desc,
|
|
|
|
|
conduct1_level: element.conduct1_level,
|
|
|
|
|
conduct2_level: element.conduct2_level,
|
|
|
|
|
conduct3_level: element.conduct3_level,
|
|
|
|
|
conduct4_level: element.conduct4_level,
|
|
|
|
|
moral1_level: element.moral1_level,
|
|
|
|
|
moral2_level: element.moral2_level,
|
|
|
|
|
moral3_level: element.moral3_level,
|
|
|
|
|
discipline1_level: element.discipline1_level,
|
|
|
|
|
discipline2_level: element.discipline2_level,
|
|
|
|
|
discipline3_level: element.discipline3_level,
|
|
|
|
|
discipline4_level: element.discipline4_level,
|
|
|
|
|
discipline5_level: element.discipline5_level,
|
|
|
|
|
behavior_other_desc: element.behavior_other_desc,
|
|
|
|
|
behavior_other_level: element.behavior_other_level,
|
|
|
|
|
behavior_strength_desc: element.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: element.behavior_improve_desc,
|
|
|
|
|
orientation: element.orientation,
|
|
|
|
|
self_learning: element.self_learning,
|
|
|
|
|
training_seminar: element.training_seminar,
|
|
|
|
|
other_training: element.other_training,
|
|
|
|
|
createdAt: element.createdAt,
|
|
|
|
|
updatedAt: element.updatedAt,
|
|
|
|
|
achievements: achievements,
|
|
|
|
|
};
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
where: {
|
|
|
|
|
id: assign_id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const experimenteeData = await this.personalRepository.find({
|
|
|
|
|
select: [
|
|
|
|
|
"personal_id",
|
|
|
|
|
"prefixName",
|
|
|
|
|
"firstName",
|
|
|
|
|
"lastName",
|
|
|
|
|
"positionName",
|
|
|
|
|
"positionLevelName",
|
|
|
|
|
"organization",
|
|
|
|
|
],
|
|
|
|
|
where: { personal_id: assign.personal_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const experimentee = await experimenteeData.map((element) => ({
|
|
|
|
|
...element,
|
|
|
|
|
name: element.prefixName + element.firstName + " " + element.lastName,
|
|
|
|
|
Oc: element.organization,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
const directorData = await this.assignDirectorRepository.find({
|
2024-09-05 16:56:22 +07:00
|
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
2024-09-05 13:59:43 +07:00
|
|
|
where: { personal_id: director_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const directors = await directorData.map((element) => ({
|
|
|
|
|
...element,
|
|
|
|
|
name: element.fullname,
|
|
|
|
|
label: `${element.fullname} (${element.position}, ${element.posType}: ${element.posLevel})`,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess({
|
|
|
|
|
experimentee: experimentee ? experimentee : null,
|
|
|
|
|
person: directors ? directors : null,
|
|
|
|
|
assign,
|
|
|
|
|
evaluate: evaluateData,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
* @summary บันทึกข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Post("commander")
|
|
|
|
|
async PostDataCommander(
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Body() requestBody: CreateEvaluateAssessor,
|
2024-09-05 16:56:22 +07:00
|
|
|
@Request() request: RequestWithUser,
|
2024-09-05 13:59:43 +07:00
|
|
|
) {
|
2024-09-06 15:17:42 +07:00
|
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "commander",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
|
|
|
relations: ["profile"],
|
|
|
|
|
where: { id: assign_id },
|
|
|
|
|
});
|
|
|
|
|
if (!assign) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const postData: any = await {
|
|
|
|
|
assign_id,
|
|
|
|
|
...requestBody,
|
|
|
|
|
director_id,
|
|
|
|
|
no: requestBody.evaluate_no,
|
|
|
|
|
date_start: requestBody.start_date,
|
|
|
|
|
personal_id: assign.personal_id,
|
|
|
|
|
|
|
|
|
|
achievement_other_desc: requestBody.achievement_other
|
|
|
|
|
? requestBody.achievement_other.text
|
|
|
|
|
: "",
|
|
|
|
|
achievement_other_level: requestBody.achievement_other
|
|
|
|
|
? Number(requestBody.achievement_other.level)
|
|
|
|
|
: 0,
|
|
|
|
|
behavior_other_desc: requestBody.behavio_orther.text,
|
|
|
|
|
behavior_other_level:
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0,
|
2024-09-05 13:59:43 +07:00
|
|
|
behavior_strength_desc: requestBody.behavior_strength_desc,
|
|
|
|
|
behavior_improve_desc: requestBody.behavior_improve_desc,
|
|
|
|
|
orientation: requestBody.orientation,
|
|
|
|
|
self_learning: requestBody.self_learning,
|
|
|
|
|
training_seminar: requestBody.training_seminar,
|
|
|
|
|
other_training: requestBody.other_training,
|
|
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
|
2024-09-05 16:56:22 +07:00
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
if (evaluateAssessor) {
|
|
|
|
|
await Promise.all(
|
|
|
|
|
requestBody.evaluate_expenct_level.map(async (expenct, index) => {
|
|
|
|
|
const evaluateAchievement: CreateEvaluateAchievement = await {
|
|
|
|
|
evaluate_id: evaluateAssessor.id,
|
|
|
|
|
assign_id,
|
|
|
|
|
output_id: expenct.id.toString(),
|
|
|
|
|
assessor_id: director_id,
|
|
|
|
|
evaluate_expect_level: Number(expenct.level),
|
|
|
|
|
output_desc: requestBody.evaluate_ouptut[index].text,
|
2024-09-05 16:56:22 +07:00
|
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
2024-09-05 13:59:43 +07:00
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setLogDataDiff(request, { before: null, after: postData });
|
|
|
|
|
|
|
|
|
|
if (Number(requestBody.evaluate_no) < 3) {
|
|
|
|
|
// #noted cronjob
|
|
|
|
|
// แจ้งผู้ดูแลและผู้บังคับบัญชาเข้ามาบันทึกผลทุก 2 เดือน 3 ครั้ง
|
|
|
|
|
const dateSaveForm = await findEndDate(2, requestBody.start_date);
|
|
|
|
|
const nextNo = await (Number(requestBody.evaluate_no) + 1);
|
|
|
|
|
await new CallAPI()
|
|
|
|
|
.PostData(request, "/placement/noti", {
|
|
|
|
|
subject: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`,
|
|
|
|
|
body: `ถึงกำหนดบันทึกผลการทดลองปฏิบัติหน้าที่ราชการครั้งที่ ${nextNo} ${assign.profile.prefixName}${assign.profile.firstName} ${assign.profile.lastName}`,
|
|
|
|
|
receiverUserId: director_id,
|
|
|
|
|
payload: "",
|
|
|
|
|
isSendMail: true,
|
|
|
|
|
isSendInbox: true,
|
|
|
|
|
receiveDate: dateSaveForm,
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
console.error("Error calling API:", error);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* API แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
* @summary แก้ไขข้อมูลแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Put("commander")
|
|
|
|
|
async UpdateDataCommander(
|
|
|
|
|
@Query() assign_id: string,
|
|
|
|
|
@Query() evaluate_id: string,
|
|
|
|
|
@Body() requestBody: CreateEvaluateAssessor,
|
2024-09-05 16:56:22 +07:00
|
|
|
@Request() request: RequestWithUser,
|
2024-09-05 13:59:43 +07:00
|
|
|
) {
|
2024-09-06 15:17:42 +07:00
|
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION");
|
|
|
|
|
|
2024-09-05 13:59:43 +07:00
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
|
|
|
select: ["personal_id"],
|
|
|
|
|
where: {
|
|
|
|
|
assign_id,
|
|
|
|
|
role: "commander",
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
if (!director) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const director_id = director.personal_id;
|
|
|
|
|
|
|
|
|
|
let evaluate = await this.evaluateAssessorRepository.findOne({
|
|
|
|
|
where: { id: evaluate_id },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!evaluate) {
|
2024-09-06 09:37:29 +07:00
|
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน");
|
2024-09-05 13:59:43 +07:00
|
|
|
}
|
|
|
|
|
const before = evaluate;
|
|
|
|
|
|
|
|
|
|
evaluate.assessor_dated = requestBody.assessor_dated;
|
|
|
|
|
evaluate.knowledge_level = requestBody.knowledge_level;
|
|
|
|
|
evaluate.skill_level = requestBody.skill_level;
|
|
|
|
|
evaluate.competency_level = requestBody.competency_level;
|
|
|
|
|
evaluate.learn_level = requestBody.learn_level;
|
|
|
|
|
evaluate.apply_level = requestBody.apply_level;
|
|
|
|
|
evaluate.achievement_other_desc = requestBody.achievement_other
|
|
|
|
|
? requestBody.achievement_other.text
|
|
|
|
|
: "";
|
|
|
|
|
evaluate.achievement_other_level =
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0;
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
evaluate.achievement_strength_desc = requestBody.achievement_strength_desc;
|
|
|
|
|
evaluate.achievement_improve_desc = requestBody.achievement_improve_desc;
|
|
|
|
|
evaluate.conduct1_level = requestBody.conduct1_level;
|
|
|
|
|
evaluate.conduct2_level = requestBody.conduct2_level;
|
|
|
|
|
evaluate.conduct3_level = requestBody.conduct3_level;
|
|
|
|
|
evaluate.conduct4_level = requestBody.conduct4_level;
|
|
|
|
|
evaluate.moral1_level = requestBody.moral1_level;
|
|
|
|
|
evaluate.moral2_level = requestBody.moral2_level;
|
|
|
|
|
evaluate.moral3_level = requestBody.moral3_level;
|
|
|
|
|
evaluate.discipline1_level = requestBody.discipline1_level;
|
|
|
|
|
evaluate.discipline2_level = requestBody.discipline2_level;
|
|
|
|
|
evaluate.discipline3_level = requestBody.discipline3_level;
|
|
|
|
|
evaluate.discipline4_level = requestBody.discipline4_level;
|
|
|
|
|
evaluate.discipline5_level = requestBody.discipline5_level;
|
|
|
|
|
evaluate.behavior_other_desc = requestBody.behavio_orther.text;
|
|
|
|
|
evaluate.behavior_other_level =
|
2024-09-05 16:56:22 +07:00
|
|
|
requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0;
|
2024-09-05 13:59:43 +07:00
|
|
|
evaluate.behavior_strength_desc = requestBody.behavior_strength_desc;
|
|
|
|
|
evaluate.behavior_improve_desc = requestBody.behavior_improve_desc;
|
|
|
|
|
evaluate.orientation = requestBody.orientation;
|
|
|
|
|
evaluate.self_learning = requestBody.self_learning;
|
|
|
|
|
evaluate.training_seminar = requestBody.training_seminar;
|
|
|
|
|
evaluate.other_training = requestBody.other_training;
|
|
|
|
|
evaluate.updateUserId = request.user.sub;
|
|
|
|
|
evaluate.updateFullName = request.user.name;
|
|
|
|
|
|
2024-09-05 16:56:22 +07:00
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 13:59:43 +07:00
|
|
|
|
|
|
|
|
if (evaluateAssessor) {
|
|
|
|
|
await this.evaluateAchievementRepository.delete({
|
|
|
|
|
evaluate_id,
|
|
|
|
|
});
|
|
|
|
|
await Promise.all(
|
|
|
|
|
requestBody.evaluate_expenct_level.map(async (expenct, index) => {
|
|
|
|
|
const evaluateAchievement: CreateEvaluateAchievement = await {
|
|
|
|
|
evaluate_id: evaluateAssessor.id,
|
|
|
|
|
assign_id,
|
|
|
|
|
output_id: expenct.id.toString(),
|
|
|
|
|
assessor_id: director_id,
|
|
|
|
|
evaluate_expect_level: Number(expenct.level),
|
|
|
|
|
output_desc: requestBody.evaluate_ouptut[index].text,
|
2024-09-05 16:56:22 +07:00
|
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
2024-09-05 13:59:43 +07:00
|
|
|
createdUserId: request.user.sub,
|
|
|
|
|
createdFullName: request.user.name,
|
|
|
|
|
updateUserId: request.user.sub,
|
|
|
|
|
updateFullName: request.user.name,
|
|
|
|
|
};
|
|
|
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
|
|
|
data: request,
|
|
|
|
|
});
|
2024-09-05 16:56:22 +07:00
|
|
|
}),
|
2024-09-05 13:59:43 +07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setLogDataDiff(request, { before, after: evaluate });
|
|
|
|
|
|
|
|
|
|
return new HttpSuccess();
|
|
|
|
|
}
|
|
|
|
|
}
|