import { Controller, Get, Put, Route, Security, Tags, Body, Path, Request, SuccessResponse, Response, } 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 { In } from "typeorm"; import { KpiUserEvaluationReasonPlan } from "../entities/kpiUserEvaluationReasonPlan"; import { KpiUserEvaluationReasonRole } from "../entities/kpiUserEvaluationReasonRole"; import { KpiUserEvaluationReasonSpecial } from "../entities/kpiUserEvaluationReasonSpecial"; import { KpiUserEvaluationReasonCapacity, updateKpiUserReasonEvaluation, } from "../entities/kpiUserEvaluationReasonCapacity"; import { KpiUserEvaluationReasonDevelopment } from "../entities/kpiUserEvaluationReasonDevelopment"; import { KpiUserEvaluation } from "../entities/kpiUserEvaluation"; import { KpiUserRole } from "../entities/kpiUserRole"; import { KpiUserSpecial } from "../entities/kpiUserSpecial"; import { KpiUserCapacity } from "../entities/kpiUserCapacity"; import { KpiUserDevelopment } from "../entities/kpiUserDevelopment"; import { KpiUserPlanned } from "../entities/kpiUserPlanned"; @Route("api/v1/kpi/reason") @Tags("kpiReason") @Security("bearerAuth") @Response( HttpStatusCode.INTERNAL_SERVER_ERROR, "เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง", ) @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") export class kpiReasonController extends Controller { private kpiUserEvaluationReasonPlan = AppDataSource.getRepository(KpiUserEvaluationReasonPlan); private kpiUserEvaluationReasonRole = AppDataSource.getRepository(KpiUserEvaluationReasonRole); private kpiUserEvaluationReasonSpecial = AppDataSource.getRepository( KpiUserEvaluationReasonSpecial, ); private kpiUserEvaluationReasonCapacity = AppDataSource.getRepository( KpiUserEvaluationReasonCapacity, ); private kpiUserEvaluationReasonDevelopment = AppDataSource.getRepository( KpiUserEvaluationReasonDevelopment, ); private kpiUserPlan = AppDataSource.getRepository(KpiUserPlanned); private kpiUserRole = AppDataSource.getRepository(KpiUserRole); private kpiUserSpecial = AppDataSource.getRepository(KpiUserSpecial); private kpiUserCapacity = AppDataSource.getRepository(KpiUserCapacity); private kpiUserDevelopment = AppDataSource.getRepository(KpiUserDevelopment); /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("{type}/plan/{user}/{id}") async updateKpiPlanReason( @Path() type: string, @Path() user: string, @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluation = await this.kpiUserPlan.findOne({ where: { id: id }, relations: ["kpiUserEvaluation"], }); if (!kpiUserEvaluation) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } const kpiUserEvaluationReason = Object.assign(new KpiUserEvaluationReasonPlan(), requestBody); kpiUserEvaluationReason.type = type.trim().toUpperCase(); if (type.trim().toUpperCase() == "PROBLEM") { kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "DAFT"; } else { kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "EVALUATOR"; } kpiUserEvaluationReason.kpiUserPlannedId = id; kpiUserEvaluationReason.createdUserId = request.user.sub; kpiUserEvaluationReason.createdFullName = request.user.name; kpiUserEvaluationReason.lastUpdateUserId = request.user.sub; kpiUserEvaluationReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonPlan.save(kpiUserEvaluationReason); return new HttpSuccess(kpiUserEvaluationReason.id); } else { const kpiReason = await this.kpiUserEvaluationReasonPlan.findOne({ where: { id: id }, relations: [ "kpiUserPlanned", "kpiUserPlanned.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } if (user.trim().toUpperCase() == "EVALUATOR") { kpiReason.reasonEvaluator = requestBody.reason; kpiReason.status = kpiReason.kpiUserPlanned.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; } else if (user.trim().toUpperCase() == "COMMANDER") { kpiReason.reasonCommander = requestBody.reason; kpiReason.status = kpiReason.kpiUserPlanned.kpiUserEvaluation.commanderHighId == null ? "DONE" : "COMMANDERHIGH"; } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.status = "DONE"; } kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonPlan.save(kpiReason); return new HttpSuccess(kpiReason.id); } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("problem/plansend/user/{id}") async sendKpiPlanReason( @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { const kpiReason = await this.kpiUserEvaluationReasonPlan.findOne({ where: { id: id }, relations: [ "kpiUserPlanned", "kpiUserPlanned.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } kpiReason.status = kpiReason.kpiUserPlanned.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonPlan.save(kpiReason); return new HttpSuccess(kpiReason.id); } /** * API list หมายเหตุ (USER) * * @summary list หมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Get("{type}/plan/{user}/{id}") async listKpiUserPlanReason(@Path() id: string, @Path() type: string, @Path() user: string) { if (type.trim().toUpperCase() == "PROGRESS") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonPlan.find({ where: { kpiUserPlannedId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonPlan.find({ where: { kpiUserPlannedId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "EVALUATOR") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonPlan.find({ where: { kpiUserPlannedId: id, status: In(["EVALUATOR", "COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonPlan.find({ where: { kpiUserPlannedId: id, status: In(["COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonPlan.find({ where: { kpiUserPlannedId: id, status: In(["COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("{type}/role/{user}/{id}") async updateKpiRoleReason( @Path() type: string, @Path() user: string, @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluation = await this.kpiUserRole.findOne({ where: { id: id }, relations: ["kpiUserEvaluation"], }); if (!kpiUserEvaluation) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } const kpiUserEvaluationReason = Object.assign(new KpiUserEvaluationReasonRole(), requestBody); kpiUserEvaluationReason.type = type.trim().toUpperCase(); kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "EVALUATOR"; kpiUserEvaluationReason.kpiUserRoleId = id; kpiUserEvaluationReason.createdUserId = request.user.sub; kpiUserEvaluationReason.createdFullName = request.user.name; kpiUserEvaluationReason.lastUpdateUserId = request.user.sub; kpiUserEvaluationReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonRole.save(kpiUserEvaluationReason); return new HttpSuccess(kpiUserEvaluationReason.id); } else { const kpiReason = await this.kpiUserEvaluationReasonRole.findOne({ where: { id: id }, relations: [ "kpiUserRole", "kpiUserRole.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } if (user.trim().toUpperCase() == "EVALUATOR") { kpiReason.reasonEvaluator = requestBody.reason; kpiReason.status = kpiReason.kpiUserRole.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; } else if (user.trim().toUpperCase() == "COMMANDER") { kpiReason.reasonCommander = requestBody.reason; kpiReason.status = kpiReason.kpiUserRole.kpiUserEvaluation.commanderHighId == null ? "DONE" : "COMMANDERHIGH"; } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.status = "DONE"; } kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonRole.save(kpiReason); return new HttpSuccess(kpiReason.id); } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("problem/rolesend/user/{id}") async sendKpiRoleReason( @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { const kpiReason = await this.kpiUserEvaluationReasonRole.findOne({ where: { id: id }, relations: [ "kpiUserRole", "kpiUserRole.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } kpiReason.status = kpiReason.kpiUserRole.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonRole.save(kpiReason); return new HttpSuccess(kpiReason.id); } /** * API list หมายเหตุ (USER) * * @summary list หมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Get("{type}/role/{user}/{id}") async listKpiUserRoleReason(@Path() id: string, @Path() type: string, @Path() user: string) { if (type.trim().toUpperCase() == "PROGRESS") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonRole.find({ where: { kpiUserRoleId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonRole.find({ where: { kpiUserRoleId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "EVALUATOR") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonRole.find({ where: { kpiUserRoleId: id, status: In(["EVALUATOR", "COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonRole.find({ where: { kpiUserRoleId: id, status: In(["COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonRole.find({ where: { kpiUserRoleId: id, status: In(["COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("{type}/special/{user}/{id}") async updateKpiSpecialReason( @Path() type: string, @Path() user: string, @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluation = await this.kpiUserSpecial.findOne({ where: { id: id }, relations: ["kpiUserEvaluation"], }); if (!kpiUserEvaluation) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } const kpiUserEvaluationReason = Object.assign( new KpiUserEvaluationReasonSpecial(), requestBody, ); kpiUserEvaluationReason.type = type.trim().toUpperCase(); kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "EVALUATOR"; kpiUserEvaluationReason.kpiUserSpecialId = id; kpiUserEvaluationReason.createdUserId = request.user.sub; kpiUserEvaluationReason.createdFullName = request.user.name; kpiUserEvaluationReason.lastUpdateUserId = request.user.sub; kpiUserEvaluationReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonSpecial.save(kpiUserEvaluationReason); return new HttpSuccess(kpiUserEvaluationReason.id); } else { const kpiReason = await this.kpiUserEvaluationReasonSpecial.findOne({ where: { id: id }, relations: [ "kpiUserSpecial", "kpiUserSpecial.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } if (user.trim().toUpperCase() == "EVALUATOR") { kpiReason.reasonEvaluator = requestBody.reason; kpiReason.status = kpiReason.kpiUserSpecial.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; } else if (user.trim().toUpperCase() == "COMMANDER") { kpiReason.reasonCommander = requestBody.reason; kpiReason.status = kpiReason.kpiUserSpecial.kpiUserEvaluation.commanderHighId == null ? "DONE" : "COMMANDERHIGH"; } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.status = "DONE"; } kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonSpecial.save(kpiReason); return new HttpSuccess(kpiReason.id); } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("problem/specialsend/user/{id}") async sendKpiSpecialReason( @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { const kpiReason = await this.kpiUserEvaluationReasonSpecial.findOne({ where: { id: id }, relations: [ "kpiUserSpecial", "kpiUserSpecial.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } kpiReason.status = kpiReason.kpiUserSpecial.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonSpecial.save(kpiReason); return new HttpSuccess(kpiReason.id); } /** * API list หมายเหตุ (USER) * * @summary list หมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Get("{type}/special/{user}/{id}") async listKpiUserSpecialReason(@Path() id: string, @Path() type: string, @Path() user: string) { if (type.trim().toUpperCase() == "PROGRESS") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonSpecial.find({ where: { kpiUserSpecialId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonSpecial.find({ where: { kpiUserSpecialId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "EVALUATOR") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonSpecial.find({ where: { kpiUserSpecialId: id, status: In(["EVALUATOR", "COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonSpecial.find({ where: { kpiUserSpecialId: id, status: In(["COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonSpecial.find({ where: { kpiUserSpecialId: id, status: In(["COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("{type}/development/{user}/{id}") async updateKpiDevelopmentReason( @Path() type: string, @Path() user: string, @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluation = await this.kpiUserDevelopment.findOne({ where: { id: id }, relations: ["kpiUserEvaluation"], }); if (!kpiUserEvaluation) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } const kpiUserEvaluationReason = Object.assign( new KpiUserEvaluationReasonDevelopment(), requestBody, ); kpiUserEvaluationReason.type = type.trim().toUpperCase(); kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "EVALUATOR"; kpiUserEvaluationReason.kpiUserDevelopmentId = id; kpiUserEvaluationReason.createdUserId = request.user.sub; kpiUserEvaluationReason.createdFullName = request.user.name; kpiUserEvaluationReason.lastUpdateUserId = request.user.sub; kpiUserEvaluationReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonDevelopment.save(kpiUserEvaluationReason); return new HttpSuccess(kpiUserEvaluationReason.id); } else { const kpiReason = await this.kpiUserEvaluationReasonDevelopment.findOne({ where: { id: id }, relations: [ "kpiUserDevelopment", "kpiUserDevelopment.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } if (user.trim().toUpperCase() == "EVALUATOR") { kpiReason.reasonEvaluator = requestBody.reason; kpiReason.status = kpiReason.kpiUserDevelopment.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; } else if (user.trim().toUpperCase() == "COMMANDER") { kpiReason.reasonCommander = requestBody.reason; kpiReason.status = kpiReason.kpiUserDevelopment.kpiUserEvaluation.commanderHighId == null ? "DONE" : "COMMANDERHIGH"; } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.status = "DONE"; } kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonDevelopment.save(kpiReason); return new HttpSuccess(kpiReason.id); } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("problem/development/user/{id}") async sendKpiDevelopmentReason( @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { const kpiReason = await this.kpiUserEvaluationReasonDevelopment.findOne({ where: { id: id }, relations: [ "kpiUserDevelopment", "kpiUserDevelopment.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } kpiReason.status = kpiReason.kpiUserDevelopment.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonDevelopment.save(kpiReason); return new HttpSuccess(kpiReason.id); } /** * API list หมายเหตุ (USER) * * @summary list หมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Get("{type}/development/{user}/{id}") async listKpiUserDevelopmentReason( @Path() id: string, @Path() type: string, @Path() user: string, ) { if (type.trim().toUpperCase() == "PROGRESS") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonDevelopment.find({ where: { kpiUserDevelopmentId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonDevelopment.find({ where: { kpiUserDevelopmentId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "EVALUATOR") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonDevelopment.find({ where: { kpiUserDevelopmentId: id, status: In(["EVALUATOR", "COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonDevelopment.find({ where: { kpiUserDevelopmentId: id, status: In(["COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonDevelopment.find({ where: { kpiUserDevelopmentId: id, status: In(["COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("{type}/capacity/{user}/{id}") async updateKpiCapacityReason( @Path() type: string, @Path() user: string, @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluation = await this.kpiUserCapacity.findOne({ where: { id: id }, relations: ["kpiUserEvaluation"], }); if (!kpiUserEvaluation) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } const kpiUserEvaluationReason = Object.assign( new KpiUserEvaluationReasonCapacity(), requestBody, ); kpiUserEvaluationReason.type = type.trim().toUpperCase(); kpiUserEvaluationReason.status = kpiUserEvaluation.kpiUserEvaluation.evaluatorId == null ? "DONE" : "EVALUATOR"; kpiUserEvaluationReason.kpiUserCapacityId = id; kpiUserEvaluationReason.createdUserId = request.user.sub; kpiUserEvaluationReason.createdFullName = request.user.name; kpiUserEvaluationReason.lastUpdateUserId = request.user.sub; kpiUserEvaluationReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonCapacity.save(kpiUserEvaluationReason); return new HttpSuccess(kpiUserEvaluationReason.id); } else { const kpiReason = await this.kpiUserEvaluationReasonCapacity.findOne({ where: { id: id }, relations: [ "kpiUserCapacity", "kpiUserCapacity.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } if (user.trim().toUpperCase() == "EVALUATOR") { kpiReason.reasonEvaluator = requestBody.reason; kpiReason.status = kpiReason.kpiUserCapacity.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; } else if (user.trim().toUpperCase() == "COMMANDER") { kpiReason.reasonCommander = requestBody.reason; kpiReason.status = kpiReason.kpiUserCapacity.kpiUserEvaluation.commanderHighId == null ? "DONE" : "COMMANDERHIGH"; } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.status = "DONE"; } kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonCapacity.save(kpiReason); return new HttpSuccess(kpiReason.id); } } /** * API แก้ไขหมายเหตุ (USER) * * @summary แก้ไขหมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Put("problem/capacity/user/{id}") async sendKpiCapacityReason( @Path() id: string, @Body() requestBody: updateKpiUserReasonEvaluation, @Request() request: { user: Record }, ) { const kpiReason = await this.kpiUserEvaluationReasonCapacity.findOne({ where: { id: id }, relations: [ "kpiUserCapacity", "kpiUserCapacity.kpiUserEvaluation", ], }); if (!kpiReason) { throw new HttpError( HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรายการประเมินผลการปฏิบัติราชการระดับบุคคลนี้", ); } kpiReason.status = kpiReason.kpiUserCapacity.kpiUserEvaluation.commanderId == null ? "DONE" : "COMMANDER"; kpiReason.reasonCommanderHigh = requestBody.reason; kpiReason.lastUpdateUserId = request.user.sub; kpiReason.lastUpdateFullName = request.user.name; await this.kpiUserEvaluationReasonCapacity.save(kpiReason); return new HttpSuccess(kpiReason.id); } /** * API list หมายเหตุ (USER) * * @summary list หมายเหตุ (USER) * * @param {string} id Guid, *Id คนประเมิน (USER) */ @Get("{type}/capacity/{user}/{id}") async listKpiUserCapacityReason(@Path() id: string, @Path() type: string, @Path() user: string) { if (type.trim().toUpperCase() == "PROGRESS") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonCapacity.find({ where: { kpiUserCapacityId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else { if (user.trim().toUpperCase() == "USER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonCapacity.find({ where: { kpiUserCapacityId: id }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "EVALUATOR") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonCapacity.find({ where: { kpiUserCapacityId: id, status: In(["EVALUATOR", "COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDER") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonCapacity.find({ where: { kpiUserCapacityId: id, status: In(["COMMANDER", "COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } else if (user.trim().toUpperCase() == "COMMANDERHIGH") { const kpiUserEvaluationReason = await this.kpiUserEvaluationReasonCapacity.find({ where: { kpiUserCapacityId: id, status: In(["COMMANDERHIGH", "DONE"]), }, }); return new HttpSuccess(kpiUserEvaluationReason); } } } }