1062 lines
38 KiB
TypeScript
1062 lines
38 KiB
TypeScript
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"
|
|
import { CreateEvaluateAssessor, EvaluateAssessor } from "../entities/EvaluateAssessor"
|
|
import { CreateEvaluateAchievement, EvaluateAchievement } from "../entities/EvaluateAchievement"
|
|
import CallAPI from "../interfaces/call-api"
|
|
import permission from "../interfaces/permission"
|
|
@Route("api/v1/probation/evaluate-record")
|
|
@Tags("แบบบันทึกผล")
|
|
@Security("bearerAuth")
|
|
@Response(HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง")
|
|
export class EvaluateRecordController extends Controller {
|
|
private assignDirectorRepository = AppDataSource.getRepository(AssignDirector)
|
|
private assignRepository = AppDataSource.getRepository(Assign)
|
|
private personalRepository = AppDataSource.getRepository(Personal)
|
|
private assignOutputRepository = AppDataSource.getRepository(AssignOutput)
|
|
private evaluateAssessorRepository = AppDataSource.getRepository(EvaluateAssessor)
|
|
private evaluateAchievementRepository = AppDataSource.getRepository(EvaluateAchievement)
|
|
|
|
/**
|
|
* API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล
|
|
*
|
|
* @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล
|
|
*
|
|
*/
|
|
@Get("create")
|
|
async GetCreate(@Query() assign_id: string, @Request() request: RequestWithUser) {
|
|
let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION")
|
|
if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION")
|
|
|
|
const directorData = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
|
where: {
|
|
assign_id,
|
|
role: "mentor",
|
|
},
|
|
})
|
|
|
|
if (!directorData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
const profileData = await this.personalRepository.findOne({
|
|
select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"],
|
|
where: {
|
|
personal_id: assign.personal_id,
|
|
},
|
|
})
|
|
if (!profileData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล")
|
|
}
|
|
|
|
const profile = await {
|
|
id: profileData.personal_id,
|
|
name: profileData.prefixName + profileData.firstName + " " + profileData.lastName,
|
|
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({
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
|
where: { personal_id: director_id },
|
|
})
|
|
|
|
if (!commanderData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้บังคับบัญชา")
|
|
}
|
|
|
|
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("")
|
|
async GetData(@Request() request: RequestWithUser, @Query() assign_id: string, @Query() evaluate_no?: string) {
|
|
await new permission().PermissionGet(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "mentor",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน")
|
|
}
|
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
|
select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"],
|
|
where: {
|
|
evaluate_id: evaluate.id,
|
|
},
|
|
order: { output_id: "ASC" },
|
|
})
|
|
if (!achievementData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
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,
|
|
no: Number(evaluate.no),
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
await Promise.all(
|
|
evaluate.map(async (element: any, index: number) => {
|
|
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" },
|
|
})
|
|
|
|
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,
|
|
no: Number(element.no),
|
|
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,
|
|
}
|
|
})
|
|
)
|
|
}
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
where: {
|
|
id: assign_id,
|
|
},
|
|
})
|
|
|
|
if (!assign) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
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({
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
|
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, @Request() request: RequestWithUser) {
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "mentor",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
const director_id = director.personal_id
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
relations: ["profile"],
|
|
where: { id: assign_id },
|
|
})
|
|
if (!assign) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
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: requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0,
|
|
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,
|
|
}
|
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, {
|
|
data: request,
|
|
})
|
|
|
|
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,
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
|
createdUserId: request.user.sub,
|
|
createdFullName: request.user.name,
|
|
updateUserId: request.user.sub,
|
|
updateFullName: request.user.name,
|
|
}
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
data: request,
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
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, @Request() request: RequestWithUser) {
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "mentor",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
const director_id = director.personal_id
|
|
|
|
let evaluate = await this.evaluateAssessorRepository.findOne({
|
|
where: { id: evaluate_id },
|
|
})
|
|
|
|
const before = evaluate
|
|
|
|
if (!evaluate) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน")
|
|
}
|
|
|
|
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 = requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0
|
|
|
|
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 = requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0
|
|
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
|
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, {
|
|
data: request,
|
|
})
|
|
|
|
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,
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
|
createdUserId: request.user.sub,
|
|
createdFullName: request.user.name,
|
|
updateUserId: request.user.sub,
|
|
updateFullName: request.user.name,
|
|
}
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
data: request,
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
setLogDataDiff(request, { before, after: evaluate })
|
|
|
|
return new HttpSuccess()
|
|
}
|
|
|
|
/**
|
|
* API ดึงข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
*
|
|
* @summary get ข้อมูลตอนกดสร้างแบบบันทึกผล (ผู้บังคัญบัญชา)
|
|
*
|
|
*/
|
|
@Get("create/commander")
|
|
async GetCreateCommander(@Query() assign_id: string, @Request() request: RequestWithUser) {
|
|
let _workflow = await new permission().Workflow(request, assign_id, "SYS_PROBATION")
|
|
if (_workflow == false) await new permission().PermissionGet(request, "SYS_PROBATION")
|
|
|
|
const directorData = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
|
where: {
|
|
assign_id,
|
|
role: "commander",
|
|
},
|
|
})
|
|
|
|
if (!directorData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
const profileData = await this.personalRepository.findOne({
|
|
select: ["personal_id", "prefixName", "firstName", "lastName", "positionName", "positionLevelName", "organization"],
|
|
where: {
|
|
personal_id: assign.personal_id,
|
|
},
|
|
})
|
|
if (!profileData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคล")
|
|
}
|
|
|
|
const profile = await {
|
|
id: profileData.personal_id,
|
|
name: profileData.prefixName + profileData.firstName + " " + profileData.lastName,
|
|
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")
|
|
async GetDataCommander(@Request() request: RequestWithUser, @Query() assign_id: string, @Query() evaluate_no?: string) {
|
|
await new permission().PermissionGet(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "commander",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมิน")
|
|
}
|
|
|
|
const achievementData = await this.evaluateAchievementRepository.find({
|
|
select: ["output_desc", "evaluate_expect_level", "output_desc", "evaluate_output_level"],
|
|
where: {
|
|
evaluate_id: evaluate.id,
|
|
},
|
|
order: { output_id: "ASC" },
|
|
})
|
|
if (!achievementData) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
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,
|
|
no: Number(evaluate.no),
|
|
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) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล")
|
|
}
|
|
|
|
await Promise.all(
|
|
evaluate.map(async (element: any, index: number) => {
|
|
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" },
|
|
})
|
|
|
|
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,
|
|
no: Number(element.no),
|
|
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,
|
|
}
|
|
})
|
|
)
|
|
}
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
where: {
|
|
id: assign_id,
|
|
},
|
|
})
|
|
|
|
if (!assign) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
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({
|
|
select: ["personal_id", "dated", "fullname", "position", "posType", "posLevel"],
|
|
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, @Request() request: RequestWithUser) {
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "commander",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
const director_id = director.personal_id
|
|
|
|
const assign = await this.assignRepository.findOne({
|
|
relations: ["profile"],
|
|
where: { id: assign_id },
|
|
})
|
|
if (!assign) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบมอบหมายงาน")
|
|
}
|
|
|
|
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: requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0,
|
|
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,
|
|
}
|
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(postData, {
|
|
data: request,
|
|
})
|
|
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,
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
|
createdUserId: request.user.sub,
|
|
createdFullName: request.user.name,
|
|
updateUserId: request.user.sub,
|
|
updateFullName: request.user.name,
|
|
}
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
data: request,
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
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, @Request() request: RequestWithUser) {
|
|
await new permission().PermissionUpdate(request, "SYS_PROBATION")
|
|
|
|
const director = await this.assignDirectorRepository.findOne({
|
|
select: ["personal_id"],
|
|
where: {
|
|
assign_id,
|
|
role: "commander",
|
|
},
|
|
})
|
|
if (!director) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผู้ดูแล")
|
|
}
|
|
|
|
const director_id = director.personal_id
|
|
|
|
let evaluate = await this.evaluateAssessorRepository.findOne({
|
|
where: { id: evaluate_id },
|
|
})
|
|
|
|
if (!evaluate) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการประเมิน")
|
|
}
|
|
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 = requestBody.achievement_other.text != "" ? Number(requestBody.achievement_other.level) : 0
|
|
|
|
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 = requestBody.behavio_orther.text != "" ? Number(requestBody.behavio_orther.level) : 0
|
|
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
|
|
|
|
const evaluateAssessor = await this.evaluateAssessorRepository.save(evaluate, {
|
|
data: request,
|
|
})
|
|
|
|
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,
|
|
evaluate_output_level: Number(requestBody.evaluate_ouptut[index].level),
|
|
createdUserId: request.user.sub,
|
|
createdFullName: request.user.name,
|
|
updateUserId: request.user.sub,
|
|
updateFullName: request.user.name,
|
|
}
|
|
await this.evaluateAchievementRepository.save(evaluateAchievement, {
|
|
data: request,
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
setLogDataDiff(request, { before, after: evaluate })
|
|
|
|
return new HttpSuccess()
|
|
}
|
|
}
|