Merge branch 'develop' of github.com:Frappet/bma-ehr-kpi into develop

This commit is contained in:
Kittapath 2024-05-08 16:25:27 +07:00
commit 80dfb1d3ce
9 changed files with 431 additions and 39 deletions

View file

@ -485,6 +485,10 @@ export class kpiPlanController extends Controller {
keyword: `%${requestBody.keyword}%`,
}).orWhere("kpiPlan.includingName LIKE :keyword", {
keyword: `%${requestBody.keyword}%`,
}).orWhere("kpiPlan.year LIKE :keyword",{
keyword: `%${requestBody.keyword}%`
}).orWhere("kpiPlan.period LIKE :keyword",{
keyword: `%${requestBody.keyword}%`
});
}),
)

View file

@ -404,22 +404,7 @@ export class kpiRoleController extends Controller {
const [kpiRole, total] = await AppDataSource.getRepository(KpiRole)
.createQueryBuilder("kpiRole")
.leftJoinAndSelect("kpiRole.kpiPeriod", "kpiPeriod")
.andWhere(
requestBody.node != undefined && requestBody.node != null
? requestBody.node == 4
? "kpiRole.child4Id LIKE :nodeId"
: requestBody.node == 3
? "kpiRole.child3Id LIKE :nodeId"
: requestBody.node == 2
? "kpiRole.child2Id LIKE :nodeId"
: requestBody.node == 1
? "kpiRole.child1Id LIKE :nodeId"
: "kpiRole.rootId LIKE :nodeId"
: "1=1",
{
nodeId: requestBody.nodeId,
},
)
.andWhere(condition, parameters)
// .andWhere(
// requestBody.year && requestBody.period
// ? "kpiRole.year LIKE :year AND kpiRole.period LIKE :period"
@ -434,7 +419,7 @@ export class kpiRoleController extends Controller {
? "kpiRole.year LIKE :year"
: "1=1",
{
year: `%${requestBody.year}%`,
year: requestBody.year,
},
)
.andWhere(
@ -442,7 +427,7 @@ export class kpiRoleController extends Controller {
? "kpiRole.period LIKE :period"
: "1=1",
{
period: `%${requestBody.period}%`,
period: requestBody.period,
},
)
.andWhere(requestBody.position != undefined ? "kpiRole.position LIKE :position" : "1=1", {
@ -450,10 +435,15 @@ export class kpiRoleController extends Controller {
})
.andWhere(
new Brackets((qb) => {
qb.orWhere("kpiRole.including LIKE :keyword", { keyword: `%${requestBody.keyword}%` }).orWhere(
"kpiRole.includingName LIKE :keyword",
{ keyword: `%${requestBody.keyword}%` },
);
qb.orWhere("kpiRole.including LIKE :keyword", {
keyword: `%${requestBody.keyword}%`
}).orWhere("kpiRole.includingName LIKE :keyword",{
keyword: `%${requestBody.keyword}%`
}).orWhere("kpiRole.year LIKE :keyword",{
keyword: `%${requestBody.keyword}%`
}).orWhere("kpiRole.period LIKE :keyword",{
keyword: `%${requestBody.keyword}%`
});
}),
)
.select([

View file

@ -0,0 +1,280 @@
import {
Controller,
Get,
Post,
Put,
Delete,
Route,
Security,
Tags,
Body,
Path,
Request,
SuccessResponse,
Response,
Query,
} from "tsoa";
import { AppDataSource } from "../database/data-source";
import HttpSuccess from "../interfaces/http-success";
import HttpStatusCode from "../interfaces/http-status";
import {
KpiUserDevelopment,
CreateKpiUserDevelopment,
UpdateKpiUserDevelopment,
KpiUserDevelopmentDataPoint,
} from "../entities/kpiUserDevelopment";
import HttpError from "../interfaces/http-error";
import { KpiUserEvaluation } from "../entities/kpiUserEvaluation";
import { Not } from "typeorm";
@Route("api/v1/kpi/user/achievement/Development")
@Tags("KpiUserDevelopment")
@Security("bearerAuth")
@Response(
HttpStatusCode.INTERNAL_SERVER_ERROR,
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
)
@SuccessResponse(HttpStatusCode.OK, "สำเร็จ")
export class KpiUserDevelopmentController extends Controller {
private kpiUserDevelopmentRepository = AppDataSource.getRepository(KpiUserDevelopment);
private kpiUserEvaluationRepository = AppDataSource.getRepository(KpiUserEvaluation);
/**
* API
*
* @summary - #
*
*/
@Post()
async createKpiUserDevelopment(
@Body()
requestBody: CreateKpiUserDevelopment,
@Request() request: { user: Record<string, any> },
) {
const chkUserEvaluation = await this.kpiUserEvaluationRepository.findOne({
where: { id: requestBody.kpiUserEvaluationId },
});
if (!chkUserEvaluation) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมินผู้ใช้งาน");
}
const kpiUserDevelopment = Object.assign(new KpiUserDevelopment(), requestBody);
if (!kpiUserDevelopment) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
}
// const chk_indicator = await this.kpiUserDevelopmentRepository.findOne({
// where: {
// kpiUserEvaluationId: requestBody.kpiUserEvaluationId,
// },
// });
// if (
// (chk_indicator && chk_indicator.including == requestBody.including) ||
// (chk_indicator && chk_indicator.includingName == requestBody.includingName)
// ) {
// throw new HttpError(
// HttpStatusCode.CONFLICT,
// "ไม่สามารถเพิ่มข้อมูลได้เนื่องจากข้อมูลตัวชี้วัดซ้ำ",
// );
// }
kpiUserDevelopment.createdUserId = request.user.sub;
kpiUserDevelopment.createdFullName = request.user.name;
kpiUserDevelopment.lastUpdateUserId = request.user.sub;
kpiUserDevelopment.lastUpdateFullName = request.user.name;
await this.kpiUserDevelopmentRepository.save(kpiUserDevelopment);
return new HttpSuccess(kpiUserDevelopment.id);
}
/**
* API
*
* @summary - #
*
* @param {string} id Id
*/
@Put("{id}")
async editKpiUserDevelopment(
@Path() id: string,
@Body() requestBody: UpdateKpiUserDevelopment,
@Request() request: { user: Record<string, any> },
) {
const kpiUserDevelopment = await this.kpiUserDevelopmentRepository.findOne({ where: { id } });
if (!kpiUserDevelopment) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลพัฒนาตนเองนี้");
}
const chkUserEvaluation = await this.kpiUserEvaluationRepository.findOne({
where: { id: requestBody.kpiUserEvaluationId },
});
if (!chkUserEvaluation) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลแบบประเมินผู้ใช้งาน");
}
// const chk_indicator = await this.kpiUserDevelopmentRepository.findOne({
// where: {
// id: Not(id),
// kpiUserEvaluationId: requestBody.kpiUserEvaluationId,
// },
// });
// if (
// (chk_indicator && chk_indicator.including == requestBody.including) ||
// (chk_indicator && chk_indicator.includingName == requestBody.includingName)
// ) {
// throw new HttpError(
// HttpStatusCode.CONFLICT,
// "ไม่สามารถเพิ่มข้อมูลได้เนื่องจากข้อมูลตัวชี้วัดซ้ำ",
// );
// }
kpiUserDevelopment.lastUpdateUserId = request.user.sub;
kpiUserDevelopment.lastUpdateFullName = request.user.name;
Object.assign(kpiUserDevelopment, requestBody);
await this.kpiUserDevelopmentRepository.save(kpiUserDevelopment);
return new HttpSuccess(kpiUserDevelopment.id);
}
/**
* API
*
* @summary - #
*
*/
@Delete("{id}")
async deleteKpiUserDevelopment(@Path() id: string) {
const delKpiUserDevelopment = await this.kpiUserDevelopmentRepository.findOne({ where: { id } });
if (!delKpiUserDevelopment) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลพัฒนาตนเองนี้");
}
await this.kpiUserDevelopmentRepository.remove(delKpiUserDevelopment);
return new HttpSuccess();
}
// /**
// * API รายละเอียดพัฒนาตนเอง
// *
// * @summary - รายละเอียดพัฒนาตนเอง #
// *
// * @param {string} id Id พัฒนาตนเอง
// */
// @Get("{id}")
// async GetKpiUserDevelopmentDetail(@Path() id: string) {
// const getKpiUserDevelopment = await this.kpiUserDevelopmentRepository.findOne({
// relations: ["kpiUserEvaluation"],
// where: { id: id },
// });
// if (!getKpiUserDevelopment) {
// throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลพัฒนาตนเองนี้");
// }
// const mapKpiUserDevelopment = {
// id: getKpiUserDevelopment.id,
// evaluationId: getKpiUserDevelopment.kpiUserEvaluation.id,
// including: getKpiUserDevelopment.including,
// includingName: getKpiUserDevelopment.includingName,
// target: getKpiUserDevelopment.target,
// weight: getKpiUserDevelopment.weight,
// unit: getKpiUserDevelopment.unit,
// meaning: getKpiUserDevelopment.meaning,
// formula: getKpiUserDevelopment.formula,
// point: getKpiUserDevelopment.point,
// achievement:
// getKpiUserDevelopment.point === 1
// ? getKpiUserDevelopment.achievement1
// : getKpiUserDevelopment.point === 2
// ? getKpiUserDevelopment.achievement2
// : getKpiUserDevelopment.point === 3
// ? getKpiUserDevelopment.achievement3
// : getKpiUserDevelopment.point === 4
// ? getKpiUserDevelopment.achievement4
// : getKpiUserDevelopment.point === 5
// ? getKpiUserDevelopment.achievement5
// : null,
// achievement1: getKpiUserDevelopment.achievement1,
// achievement2: getKpiUserDevelopment.achievement2,
// achievement3: getKpiUserDevelopment.achievement3,
// achievement4: getKpiUserDevelopment.achievement4,
// achievement5: getKpiUserDevelopment.achievement5,
// };
// return new HttpSuccess(mapKpiUserDevelopment);
// }
// /**
// * API รายการพัฒนาตนเอง
// *
// * @summary - รายการพัฒนาตนเอง #
// *
// */
// @Get()
// async GetKpiUserDevelopment(@Query("id") id: string) {
// const kpiUserDevelopment = await this.kpiUserDevelopmentRepository.find({
// where: {
// kpiUserEvaluationId: id,
// },
// relations: ["kpiUserEvaluation"],
// order: { createdAt: "ASC" },
// });
// const mapKpiUserDevelopment = kpiUserDevelopment.map((item) => ({
// id: item.id,
// evaluationId: item.kpiUserEvaluation.id,
// including: item.including,
// includingName: item.includingName,
// target: item.target,
// weight: item.weight,
// unit: item.unit,
// meaning: item.meaning,
// formula: item.formula,
// point: item.point,
// achievement:
// item.point === 1
// ? item.achievement1
// : item.point === 2
// ? item.achievement2
// : item.point === 3
// ? item.achievement3
// : item.point === 4
// ? item.achievement4
// : item.point === 5
// ? item.achievement5
// : null,
// achievement1: item.achievement1,
// achievement2: item.achievement2,
// achievement3: item.achievement3,
// achievement4: item.achievement4,
// achievement5: item.achievement5,
// }));
// return new HttpSuccess(mapKpiUserDevelopment);
// }
/**
* API
*
* @summary
*
*
*/
@Post("point")
async CreateKpiUserDevelopmentPoint(
@Body() requestBody: KpiUserDevelopmentDataPoint[],
@Request() request: { user: Record<string, any> },
) {
for (const item of requestBody) {
const kpiUserDevelopment = await this.kpiUserDevelopmentRepository.findOne({
where: { id: item.id },
});
if (!kpiUserDevelopment) {
throw new HttpError(
HttpStatusCode.NOT_FOUND,
`ไม่พบข้อมูลพัฒนาตนเองนี้: ${item.id}`,
);
}
this.kpiUserDevelopmentRepository.merge(kpiUserDevelopment, item);
kpiUserDevelopment.lastUpdateUserId = request.user.sub;
kpiUserDevelopment.lastUpdateFullName = request.user.name;
await this.kpiUserDevelopmentRepository.save(kpiUserDevelopment);
}
return new HttpSuccess();
}
}

View file

@ -91,14 +91,14 @@ export class KpiUserPlannedController extends Controller {
kpiUserPlanned.createdFullName = request.user.name;
kpiUserPlanned.lastUpdateUserId = request.user.sub;
kpiUserPlanned.lastUpdateFullName = request.user.name;
kpiUserPlanned.documentInfoEvidence = request.user.documentInfoEvidence;
kpiUserPlanned.startDate = request.user.startDate;
kpiUserPlanned.endDate = request.user.endDate;
kpiUserPlanned.achievement1 = request.user.achievement1;
kpiUserPlanned.achievement2 = request.user.achievement2;
kpiUserPlanned.achievement3 = request.user.achievement3;
kpiUserPlanned.achievement4 = request.user.achievement4;
kpiUserPlanned.achievement5 = request.user.achievement5;
// kpiUserPlanned.documentInfoEvidence = request.user.documentInfoEvidence;
// kpiUserPlanned.startDate = request.user.startDate;
// kpiUserPlanned.endDate = request.user.endDate;
// kpiUserPlanned.achievement1 = request.user.achievement1;
// kpiUserPlanned.achievement2 = request.user.achievement2;
// kpiUserPlanned.achievement3 = request.user.achievement3;
// kpiUserPlanned.achievement4 = request.user.achievement4;
// kpiUserPlanned.achievement5 = request.user.achievement5;
await this.kpiUserPlannedRepository.save(kpiUserPlanned);
return new HttpSuccess(kpiUserPlanned.id);
}

View file

@ -94,6 +94,14 @@ export class KpiUserRoleController extends Controller {
kpiUserRole.createdFullName = request.user.name;
kpiUserRole.lastUpdateUserId = request.user.sub;
kpiUserRole.lastUpdateFullName = request.user.name;
kpiUserRole.documentInfoEvidence = request.user.documentInfoEvidence;
kpiUserRole.startDate = request.user.startDate;
kpiUserRole.endDate = request.user.endDate;
kpiUserRole.achievement1 = request.user.achievement1;
kpiUserRole.achievement2 = request.user.achievement2;
kpiUserRole.achievement3 = request.user.achievement3;
kpiUserRole.achievement4 = request.user.achievement4;
kpiUserRole.achievement5 = request.user.achievement5;
await this.kpiUserRoleRepository.save(kpiUserRole);
return new HttpSuccess(kpiUserRole.id);
}
@ -148,6 +156,14 @@ export class KpiUserRoleController extends Controller {
kpiUserRole.lastUpdateUserId = request.user.sub;
kpiUserRole.lastUpdateFullName = request.user.name;
kpiUserRole.documentInfoEvidence = request.user.documentInfoEvidence;
kpiUserRole.startDate = request.user.startDate;
kpiUserRole.endDate = request.user.endDate;
kpiUserRole.achievement1 = request.user.achievement1;
kpiUserRole.achievement2 = request.user.achievement2;
kpiUserRole.achievement3 = request.user.achievement3;
kpiUserRole.achievement4 = request.user.achievement4;
kpiUserRole.achievement5 = request.user.achievement5;
this.kpiUserRoleRepository.merge(kpiUserRole, requestBody);
await this.kpiUserRoleRepository.save(kpiUserRole);
return new HttpSuccess(kpiUserRole.id);

View file

@ -25,6 +25,7 @@ import {
} from "../entities/kpiUserSpecial";
import HttpError from "../interfaces/http-error";
import { KpiUserEvaluation } from "../entities/kpiUserEvaluation";
import { KpiSpecial } from "../entities/kpiSpecial";
import { Not } from "typeorm";
@Route("api/v1/kpi/user/achievement/special")
@ -38,6 +39,7 @@ import { Not } from "typeorm";
export class KpiUserSpecialController extends Controller {
private kpiUserSpecialRepository = AppDataSource.getRepository(KpiUserSpecial);
private kpiUserEvaluationRepository = AppDataSource.getRepository(KpiUserEvaluation);
private kpiSpecialRepository = AppDataSource.getRepository(KpiSpecial);
/**
* API
@ -66,22 +68,46 @@ export class KpiUserSpecialController extends Controller {
const chk_indicator = await this.kpiUserSpecialRepository.findOne({
where: {
kpiUserEvaluationId: requestBody.kpiUserEvaluationId,
including: String(requestBody.including),
includingName: String(requestBody.includingName),
period: requestBody.period,
year: requestBody.year,
},
});
if (
(chk_indicator && chk_indicator.including == requestBody.including) ||
(chk_indicator && chk_indicator.includingName == requestBody.includingName)
// (chk_indicator && chk_indicator.including == requestBody.including) ||
// (chk_indicator && chk_indicator.includingName == requestBody.includingName)
chk_indicator
) {
throw new HttpError(
HttpStatusCode.CONFLICT,
"ไม่สามารถเพิ่มข้อมูลได้เนื่องจากข้อมูลตัวชี้วัดซ้ำ",
);
}
const chk_kpiSpecial = await this.kpiSpecialRepository.findOne({
where: {
including: String(requestBody.including),
includingName: String(requestBody.includingName)
},
});
if(!chk_kpiSpecial){
const kpiSpecial = Object.assign(new KpiSpecial(), requestBody);
if (!kpiSpecial) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
}
kpiSpecial.createdUserId = request.user.sub;
kpiSpecial.createdFullName = request.user.name;
kpiSpecial.lastUpdateUserId = request.user.sub;
kpiSpecial.lastUpdateFullName = request.user.name;
await this.kpiSpecialRepository.save(kpiSpecial);
}
kpiUserSpecial.createdUserId = request.user.sub;
kpiUserSpecial.createdFullName = request.user.name;
kpiUserSpecial.lastUpdateUserId = request.user.sub;
kpiUserSpecial.lastUpdateFullName = request.user.name;
kpiUserSpecial.documentInfoEvidence = request.user.documentInfoEvidence;
kpiUserSpecial.startDate = request.user.startDate;
kpiUserSpecial.endDate = request.user.endDate;
await this.kpiUserSpecialRepository.save(kpiUserSpecial);
return new HttpSuccess(kpiUserSpecial.id);
}
@ -114,20 +140,44 @@ export class KpiUserSpecialController extends Controller {
where: {
id: Not(id),
kpiUserEvaluationId: requestBody.kpiUserEvaluationId,
including: String(requestBody.including),
includingName: String(requestBody.includingName),
period: requestBody.period,
year: requestBody.year,
},
});
if (
(chk_indicator && chk_indicator.including == requestBody.including) ||
(chk_indicator && chk_indicator.includingName == requestBody.includingName)
// (chk_indicator && chk_indicator.including == requestBody.including) ||
// (chk_indicator && chk_indicator.includingName == requestBody.includingName)
chk_indicator
) {
throw new HttpError(
HttpStatusCode.CONFLICT,
"ไม่สามารถเพิ่มข้อมูลได้เนื่องจากข้อมูลตัวชี้วัดซ้ำ",
);
}
const chk_kpiSpecial = await this.kpiSpecialRepository.findOne({
where: {
including: String(requestBody.including),
includingName: String(requestBody.includingName)
},
});
if(!chk_kpiSpecial){
const kpiSpecial = Object.assign(new KpiSpecial(), requestBody);
if (!kpiSpecial) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
}
kpiSpecial.createdUserId = request.user.sub;
kpiSpecial.createdFullName = request.user.name;
kpiSpecial.lastUpdateUserId = request.user.sub;
kpiSpecial.lastUpdateFullName = request.user.name;
await this.kpiSpecialRepository.save(kpiSpecial);
}
kpiUserSpecial.lastUpdateUserId = request.user.sub;
kpiUserSpecial.lastUpdateFullName = request.user.name;
kpiUserSpecial.documentInfoEvidence = request.user.documentInfoEvidence;
kpiUserSpecial.startDate = request.user.startDate;
kpiUserSpecial.endDate = request.user.endDate;
Object.assign(kpiUserSpecial, requestBody);
await this.kpiUserSpecialRepository.save(kpiUserSpecial);
return new HttpSuccess(kpiUserSpecial.id);

View file

@ -60,7 +60,7 @@ export class KpiUserDevelopment extends EntityBase {
kpiUserEvaluation: KpiUserEvaluation;
}
export class CreateKpiUserSpecial {
export class CreateKpiUserDevelopment {
@Column()
including: string | null;
@Column()
@ -89,7 +89,7 @@ export class CreateKpiUserSpecial {
kpiUserEvaluationId: string;
}
export class UpdateKpiUserSpecial {
export class UpdateKpiUserDevelopment {
@Column()
including: string | null;
@Column()
@ -118,7 +118,7 @@ export class UpdateKpiUserSpecial {
kpiUserEvaluationId: string;
}
export class KpiUserSpecialDataPoint {
export class KpiUserDevelopmentDataPoint {
id: string;
point: number;
}

View file

@ -154,6 +154,22 @@ export class CreateKpiUserRole {
kpiUserEvaluationId: string;
@Column("uuid")
kpiRoleId: string;
@Column()
documentInfoEvidence: string;
@Column()
startDate: Date;
@Column()
endDate: Date;
@Column()
achievement1: string;
@Column()
achievement2: string;
@Column()
achievement3: string;
@Column()
achievement4: string;
@Column()
achievement5: string;
}
export class UpdateKpiUserRole {
@ -171,6 +187,22 @@ export class UpdateKpiUserRole {
kpiUserEvaluationId: string;
@Column("uuid")
kpiRoleId: string;
@Column()
documentInfoEvidence: string;
@Column()
startDate: Date;
@Column()
endDate: Date;
@Column()
achievement1: string;
@Column()
achievement2: string;
@Column()
achievement3: string;
@Column()
achievement4: string;
@Column()
achievement5: string;
}
export class KpiUserRoleDataPoint {

View file

@ -187,6 +187,16 @@ export class CreateKpiUserSpecial {
formula: string;
@Column("uuid")
kpiUserEvaluationId: string;
@Column()
documentInfoEvidence: string;
@Column()
startDate: Date;
@Column()
endDate: Date;
@Column()
period: string;
@Column()
year: string;
}
export class UpdateKpiUserSpecial {
@ -216,6 +226,16 @@ export class UpdateKpiUserSpecial {
formula: string;
@Column("uuid")
kpiUserEvaluationId: string;
@Column()
documentInfoEvidence: string;
@Column()
startDate: Date;
@Column()
endDate: Date;
@Column()
period: string;
@Column()
year: string;
}
export class KpiUserSpecialDataPoint {