256 lines
8.8 KiB
TypeScript
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();
|
|
}
|
|
}
|