hrms-api-kpi/src/controllers/KpiRoleController.ts

256 lines
8.8 KiB
TypeScript

import {
Controller,
Get,
Post,
Put,
Delete,
Route,
Security,
Tags,
Body,
Path,
Request,
Example,
SuccessResponse,
Response,
Query,
} 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 { KpiRole, createKpiRole, updateKpiRole } from "../entities/kpiRole";
import CallAPI from "../interfaces/call-api";
@Route("api/v1/kpi/role")
@Tags("kpiRole")
@Security("bearerAuth")
@Response(
HttpStatusCode.INTERNAL_SERVER_ERROR,
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
)
@SuccessResponse(HttpStatusCode.OK, "สำเร็จ")
export class kpiRoleController extends Controller {
private kpiRoleRepository = AppDataSource.getRepository(KpiRole);
/**
* สร้างตัวชี้วัดตามตำแหน่ง
* @param requestBody
* @param request
*/
@Post()
async createKpiRole(
@Body() requestBody: createKpiRole,
@Request() request: { user: Record<string, any> },
) {
const kpiRole = Object.assign(new KpiRole(), requestBody);
await new CallAPI()
.PostData(request, "org/find/all", {
node: requestBody.node,
nodeId: requestBody.nodeId,
})
.then((x) => {
kpiRole.root = x.root;
kpiRole.rootId = x.rootId;
kpiRole.rootShortName = x.rootShortName;
kpiRole.child1 = requestBody.node <= 0 ? null : x.child1;
kpiRole.child1Id = requestBody.node <= 0 ? null : x.child1Id;
kpiRole.child1ShortName = requestBody.node <= 0 ? null : x.child1ShortName;
kpiRole.child2 = requestBody.node <= 1 ? null : x.child2;
kpiRole.child2Id = requestBody.node <= 1 ? null : x.child2Id;
kpiRole.child2ShortName = requestBody.node <= 1 ? null : x.child2ShortName;
kpiRole.child3 = requestBody.node <= 2 ? null : x.child3;
kpiRole.child3Id = requestBody.node <= 2 ? null : x.child3Id;
kpiRole.child3ShortName = requestBody.node <= 2 ? null : x.child3ShortName;
kpiRole.child4 = requestBody.node <= 3 ? null : x.child4;
kpiRole.child4Id = requestBody.node <= 3 ? null : x.child4Id;
kpiRole.child4ShortName = requestBody.node <= 3 ? null : x.child4ShortName;
})
.catch((x) => {});
kpiRole.round = requestBody.round.trim().toUpperCase();
kpiRole.createdUserId = request.user.sub;
kpiRole.createdFullName = request.user.name;
kpiRole.lastUpdateUserId = request.user.sub;
kpiRole.lastUpdateFullName = request.user.name;
await this.kpiRoleRepository.save(kpiRole);
return new HttpSuccess(kpiRole.id);
}
/**
* API แก้ไขตัวชี้วัดตามตำแหน่ง
* @param id
* @param requestBody
* @param request
*/
@Put("{id}")
async updateKpiRole(
@Path() id: string,
@Body() requestBody: updateKpiRole,
@Request() request: { user: Record<string, any> },
) {
const kpiRole = await this.kpiRoleRepository.findOne({
where: { id: id },
});
if (!kpiRole) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตัวชี้วัดตามตำแหน่งนี้");
}
kpiRole.round = requestBody.round.trim().toUpperCase();
Object.assign(kpiRole, requestBody);
await new CallAPI()
.PostData(request, "org/find/all", {
node: requestBody.node,
nodeId: requestBody.nodeId,
})
.then((x) => {
kpiRole.root = x.root;
kpiRole.rootId = x.rootId;
kpiRole.rootShortName = x.rootShortName;
kpiRole.child1 = requestBody.node <= 0 ? null : x.child1;
kpiRole.child1Id = requestBody.node <= 0 ? null : x.child1Id;
kpiRole.child1ShortName = requestBody.node <= 0 ? null : x.child1ShortName;
kpiRole.child2 = requestBody.node <= 1 ? null : x.child2;
kpiRole.child2Id = requestBody.node <= 1 ? null : x.child2Id;
kpiRole.child2ShortName = requestBody.node <= 1 ? null : x.child2ShortName;
kpiRole.child3 = requestBody.node <= 2 ? null : x.child3;
kpiRole.child3Id = requestBody.node <= 2 ? null : x.child3Id;
kpiRole.child3ShortName = requestBody.node <= 2 ? null : x.child3ShortName;
kpiRole.child4 = requestBody.node <= 3 ? null : x.child4;
kpiRole.child4Id = requestBody.node <= 3 ? null : x.child4Id;
kpiRole.child4ShortName = requestBody.node <= 3 ? null : x.child4ShortName;
})
.catch((x) => {});
kpiRole.createdUserId = request.user.sub;
kpiRole.createdFullName = request.user.name;
kpiRole.lastUpdateUserId = request.user.sub;
kpiRole.lastUpdateFullName = request.user.name;
await this.kpiRoleRepository.save(kpiRole);
return new HttpSuccess(id);
}
/**
* API ตัวชี้วัดตามตำแหน่ง
* @param id Guid, *Id ตัวชี้วัดตามตำแหน่ง
*/
@Get("{id}")
async GetKpiRoleById(@Path() id: string) {
const kpiRole = await this.kpiRoleRepository.findOne({
where: { id: id },
});
if (!kpiRole) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตัวชี้วัดตามตำแหน่งนี้");
}
let node = null;
let nodeId = null;
if (kpiRole.child4Id != null) {
node = 4;
nodeId = kpiRole.child4Id;
} else if (kpiRole.child3Id != null) {
node = 3;
nodeId = kpiRole.child3Id;
} else if (kpiRole.child2Id != null) {
node = 2;
nodeId = kpiRole.child2Id;
} else if (kpiRole.child1Id != null) {
node = 1;
nodeId = kpiRole.child1Id;
} else if (kpiRole.rootId != null) {
node = 0;
nodeId = kpiRole.rootId;
}
const formattedData = {
id: kpiRole.id,
year: kpiRole.year,
round: kpiRole.round,
including: kpiRole.including,
includingName: kpiRole.includingName,
target: kpiRole.target,
unit: kpiRole.unit,
weight: kpiRole.weight,
achievement1: kpiRole.achievement1,
achievement2: kpiRole.achievement2,
achievement3: kpiRole.achievement3,
achievement4: kpiRole.achievement4,
achievement5: kpiRole.achievement5,
meaning: kpiRole.meaning,
formula: kpiRole.formula,
node: node,
nodeId: nodeId,
orgRevisionId: kpiRole.orgRevisionId,
};
return new HttpSuccess(formattedData);
}
/**
* API list ตัวชี้วัดตามตำแหน่ง
* @param page
* @param pageSize
* @param keyword
*/
@Get()
async listKpiRole(
@Query("page") page: number = 1,
@Query("pageSize") pageSize: number = 10,
@Query("round") round?: string,
@Query("nodeId") nodeId?: string | null,
@Query("node") node?: number | null,
@Query("keyword") keyword?: string,
@Query("position") position?: string,
) {
const [kpiRole, total] = await AppDataSource.getRepository(KpiRole)
.createQueryBuilder("kpiRole")
.andWhere(
node != undefined && node != null
? node == 4
? "kpiRole.child4Id LIKE :nodeId"
: node == 3
? "kpiRole.child3Id LIKE :nodeId"
: node == 2
? "kpiRole.child2Id LIKE :nodeId"
: node == 1
? "kpiRole.child1Id LIKE :nodeId"
: "kpiRole.rootId LIKE :nodeId"
: "1=1",
{
nodeId: `${nodeId}`,
},
)
.andWhere(
round != undefined && round != null && round != "" ? "kpiRole.round LIKE :round" : "1=1",
{
round: `${round?.trim().toUpperCase()}`,
},
)
.andWhere(position != undefined ? "kpiRole.position LIKE :position" : "1=1", {
position: `%${position}%`,
})
.select([
"kpiRole.id",
"kpiRole.year",
"kpiRole.round",
"kpiRole.including",
"kpiRole.includingName",
])
.orderBy("kpiRole.createdAt", "DESC")
.skip((page - 1) * pageSize)
.take(pageSize)
.getManyAndCount();
return new HttpSuccess({ data: kpiRole, total });
}
/**
* API ลบตัวชี้วัดตามตำแหน่ง
* @param id
*/
@Delete("{id}")
async deleteKpiRole(@Path() id: string) {
const kpiRole = await this.kpiRoleRepository.findOne({
where: { id: id },
});
if (!kpiRole) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลตัวชี้วัดตามตำแหน่งนี้");
}
await this.kpiRoleRepository.remove(kpiRole);
return new HttpSuccess();
}
}