add permission brother

This commit is contained in:
kittapath 2025-12-12 01:38:57 +07:00
parent 43aeb144d4
commit c73fe877a0
3 changed files with 184 additions and 172 deletions

View file

@ -66,7 +66,7 @@ export class KpiUserDevelopmentController extends Controller {
} }
const chkName = await this.kpiUserDevelopmentRepository.findOne({ const chkName = await this.kpiUserDevelopmentRepository.findOne({
where: { where: {
kpiUserEvaluationId: requestBody.kpiUserEvaluationId, kpiUserEvaluationId: requestBody.kpiUserEvaluationId,
name: requestBody.name, name: requestBody.name,
}, },
@ -393,7 +393,7 @@ export class KpiUserDevelopmentController extends Controller {
_data.child1 != undefined && _data.child1 != null _data.child1 != undefined && _data.child1 != null
? _data.child1[0] != null ? _data.child1[0] != null
? `kpiUserEvaluation.child1DnaId IN (:...child1)` ? `kpiUserEvaluation.child1DnaId IN (:...child1)`
: `kpiUserEvaluation.child1DnaId is null` : `kpiUserEvaluation.child1DnaId is ${_data.privilege == "PARENT" ? "not null" : "null"}`
: "1=1", : "1=1",
{ {
child1: _data.child1, child1: _data.child1,
@ -458,66 +458,69 @@ export class KpiUserDevelopmentController extends Controller {
.orWhere("kpiUserDevelopment.name LIKE :keyword", { .orWhere("kpiUserDevelopment.name LIKE :keyword", {
keyword: `%${requestBody.keyword}%`, keyword: `%${requestBody.keyword}%`,
}) })
.orWhere( "kpiUserEvaluation.org LIKE :keyword", { .orWhere("kpiUserEvaluation.org LIKE :keyword", {
keyword: `%${requestBody.keyword}%`, keyword: `%${requestBody.keyword}%`,
}) })
.orWhere( "CONCAT(kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword", { .orWhere("CONCAT(kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword", {
keyword: `%${requestBody.keyword}%`,
})
.orWhere( "CONCAT(kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword", {
keyword: `%${requestBody.keyword}%`,
})
.orWhere( "CONCAT(kpiUserEvaluation.child3,' ', kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword", {
keyword: `%${requestBody.keyword}%`,
})
.orWhere( "CONCAT(kpiUserEvaluation.child4,' ', kpiUserEvaluation.child3,' ', kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword", {
keyword: `%${requestBody.keyword}%`, keyword: `%${requestBody.keyword}%`,
}) })
.orWhere(
"CONCAT(kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword",
{
keyword: `%${requestBody.keyword}%`,
},
)
.orWhere(
"CONCAT(kpiUserEvaluation.child3,' ', kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword",
{
keyword: `%${requestBody.keyword}%`,
},
)
.orWhere(
"CONCAT(kpiUserEvaluation.child4,' ', kpiUserEvaluation.child3,' ', kpiUserEvaluation.child2,' ', kpiUserEvaluation.child1,' ', kpiUserEvaluation.org) LIKE :keyword",
{
keyword: `%${requestBody.keyword}%`,
},
)
.orWhere(conditionFullName, { .orWhere(conditionFullName, {
keyword: `%${requestBody.keyword}%`, keyword: `%${requestBody.keyword}%`,
}); });
}), }),
) );
if (requestBody.sortBy) { if (requestBody.sortBy) {
if(requestBody.sortBy === "developmentName"){ if (requestBody.sortBy === "developmentName") {
query = query.orderBy( query = query.orderBy(`kpiUserDevelopment.name`, requestBody.descending ? "DESC" : "ASC");
`kpiUserDevelopment.name`, } else if (requestBody.sortBy === "organization") {
requestBody.descending ? "DESC" : "ASC" query = query
);
}else if (requestBody.sortBy === "organization"){
query = query
.orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
}else if(requestBody.sortBy === "firstname"){ } else if (requestBody.sortBy === "firstname") {
query = query.orderBy( query = query.orderBy(
`kpiUserEvaluation.firstName`, `kpiUserEvaluation.firstName`,
requestBody.descending ? "DESC" : "ASC" requestBody.descending ? "DESC" : "ASC",
); );
}else if(requestBody.sortBy === "lastname"){ } else if (requestBody.sortBy === "lastname") {
query = query.orderBy( query = query.orderBy(
`kpiUserEvaluation.lastName`, `kpiUserEvaluation.lastName`,
requestBody.descending ? "DESC" : "ASC" requestBody.descending ? "DESC" : "ASC",
); );
}else if(requestBody.sortBy === "root"){ } else if (requestBody.sortBy === "root") {
query = query.orderBy( query = query.orderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
`kpiUserEvaluation.org`, } else {
requestBody.descending ? "DESC" : "ASC" query = query.orderBy(
); `kpiUserEvaluation.${requestBody.sortBy}`,
}else{ requestBody.descending ? "DESC" : "ASC",
query = query.orderBy( );
`kpiUserEvaluation.${requestBody.sortBy}`,
requestBody.descending ? "DESC" : "ASC"
);
}
}else{
query = query.orderBy("kpiUserDevelopment.createdAt", "ASC")
} }
} else {
query = query.orderBy("kpiUserDevelopment.createdAt", "ASC");
}
const [kpiUserDevelopment, total] = await query const [kpiUserDevelopment, total] = await query
.skip((requestBody.page - 1) * requestBody.pageSize) .skip((requestBody.page - 1) * requestBody.pageSize)
.take(requestBody.pageSize) .take(requestBody.pageSize)
.getManyAndCount(); .getManyAndCount();

View file

@ -186,16 +186,16 @@ export class KpiUserEvaluationController extends Controller {
// }); // });
}), }),
) )
.orderBy("kpiUserEvaluation.createdAt", "DESC") .orderBy("kpiUserEvaluation.createdAt", "DESC");
if (requestBody.sortBy) { if (requestBody.sortBy) {
query = query.orderBy( query = query.orderBy(
`kpiUserEvaluation.${requestBody.sortBy}`, `kpiUserEvaluation.${requestBody.sortBy}`,
requestBody.descending ? "DESC" : "ASC" requestBody.descending ? "DESC" : "ASC",
); );
} }
const [kpiUserEvaluation, total] = await query const [kpiUserEvaluation, total] = await query
.skip((requestBody.page - 1) * requestBody.pageSize) .skip((requestBody.page - 1) * requestBody.pageSize)
.take(requestBody.pageSize) .take(requestBody.pageSize)
.getManyAndCount(); .getManyAndCount();
@ -271,7 +271,7 @@ export class KpiUserEvaluationController extends Controller {
_data.child1 != undefined && _data.child1 != null _data.child1 != undefined && _data.child1 != null
? _data.child1[0] != null ? _data.child1[0] != null
? `kpiUserEvaluation.child1DnaId IN (:...child1)` ? `kpiUserEvaluation.child1DnaId IN (:...child1)`
: `kpiUserEvaluation.child1DnaId is null` : `kpiUserEvaluation.child1DnaId is ${_data.privilege == "PARENT" ? "not null" : "null"}`
: "1=1", : "1=1",
{ {
child1: _data.child1, child1: _data.child1,
@ -386,30 +386,27 @@ export class KpiUserEvaluationController extends Controller {
keyword: `%${requestBody.keyword}%`, keyword: `%${requestBody.keyword}%`,
}); });
}), }),
) );
if (requestBody.sortBy) { if (requestBody.sortBy) {
if(requestBody.sortBy === "root"){ if (requestBody.sortBy === "root") {
query = query.orderBy( query = query.orderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
`kpiUserEvaluation.org`, } else if (requestBody.sortBy === "organization") {
requestBody.descending ? "DESC" : "ASC" query = query
); .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC")
}else if(requestBody.sortBy === "organization"){ .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC")
query = query .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC")
.orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
.addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") } else {
.addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") query = query.orderBy(
.addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); `kpiUserEvaluation.${requestBody.sortBy}`,
}else{ requestBody.descending ? "DESC" : "ASC",
query = query.orderBy( );
`kpiUserEvaluation.${requestBody.sortBy}`,
requestBody.descending ? "DESC" : "ASC"
);
}
}else{
query = query.orderBy("kpiUserEvaluation.createdAt", "DESC")
} }
} else {
query = query.orderBy("kpiUserEvaluation.createdAt", "DESC");
}
const [kpiUserEvaluation, total] = await query const [kpiUserEvaluation, total] = await query
.skip((requestBody.page - 1) * requestBody.pageSize) .skip((requestBody.page - 1) * requestBody.pageSize)
@ -556,7 +553,7 @@ export class KpiUserEvaluationController extends Controller {
_data.child1 != undefined && _data.child1 != null _data.child1 != undefined && _data.child1 != null
? _data.child1[0] != null ? _data.child1[0] != null
? `kpiUserEvaluation.child1DnaId IN (:...child1)` ? `kpiUserEvaluation.child1DnaId IN (:...child1)`
: `kpiUserEvaluation.child1DnaId is null` : `kpiUserEvaluation.child1DnaId is ${_data.privilege == "PARENT" ? "not null" : "null"}`
: "1=1", : "1=1",
{ {
child1: _data.child1, child1: _data.child1,
@ -591,31 +588,29 @@ export class KpiUserEvaluationController extends Controller {
{ {
child4: _data.child4, child4: _data.child4,
}, },
) );
if (requestBody.sortBy) { if (requestBody.sortBy) {
if(requestBody.sortBy === "root"){ if (requestBody.sortBy === "root") {
query = query.orderBy( query = query.orderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
`kpiUserEvaluation.org`, } else if (requestBody.sortBy === "organization") {
requestBody.descending ? "DESC" : "ASC" query = query
); .orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC")
}else if(requestBody.sortBy === "organization"){ .addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC")
query = query .addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC")
.orderBy(`kpiUserEvaluation.child4`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC")
.addOrderBy(`kpiUserEvaluation.child3`, requestBody.descending ? "DESC" : "ASC") .addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC");
.addOrderBy(`kpiUserEvaluation.child2`, requestBody.descending ? "DESC" : "ASC") } else {
.addOrderBy(`kpiUserEvaluation.child1`, requestBody.descending ? "DESC" : "ASC") query = query.orderBy(
.addOrderBy(`kpiUserEvaluation.org`, requestBody.descending ? "DESC" : "ASC"); `kpiUserEvaluation.${requestBody.sortBy}`,
}else{ requestBody.descending ? "DESC" : "ASC",
query = query.orderBy( );
`kpiUserEvaluation.${requestBody.sortBy}`,
requestBody.descending ? "DESC" : "ASC"
);
}
}else{
query = query.orderBy("kpiPeriod.year", "DESC")
.addOrderBy("kpiUserEvaluation.createdAt", "DESC")
} }
} else {
query = query
.orderBy("kpiPeriod.year", "DESC")
.addOrderBy("kpiUserEvaluation.createdAt", "DESC");
}
const [kpiUserEvaluation, total] = await query const [kpiUserEvaluation, total] = await query
.skip((requestBody.page - 1) * requestBody.pageSize) .skip((requestBody.page - 1) * requestBody.pageSize)
@ -667,10 +662,12 @@ export class KpiUserEvaluationController extends Controller {
@Body() requestBody: createKpiUserEvaluation, @Body() requestBody: createKpiUserEvaluation,
@Request() request: RequestWithUser, @Request() request: RequestWithUser,
) { ) {
if(requestBody.evaluatorId == requestBody.commanderId || if (
requestBody.commanderId == requestBody.commanderHighId || requestBody.evaluatorId == requestBody.commanderId ||
requestBody.evaluatorId == requestBody.commanderHighId){ requestBody.commanderId == requestBody.commanderHighId ||
throw new HttpError( requestBody.evaluatorId == requestBody.commanderHighId
) {
throw new HttpError(
HttpStatusCode.NOT_FOUND, HttpStatusCode.NOT_FOUND,
"ไม่สามารถเลือกผู้ประเมินหรือผู้บังคับบัญชาซ้ำกันได้", "ไม่สามารถเลือกผู้ประเมินหรือผู้บังคับบัญชาซ้ำกันได้",
); );
@ -1345,7 +1342,7 @@ export class KpiUserEvaluationController extends Controller {
@Body() requestBody: { reason: string; actor: string }, @Body() requestBody: { reason: string; actor: string },
@Request() request: RequestWithUser, @Request() request: RequestWithUser,
) { ) {
try{ try {
const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({ const kpiUserEvaluation = await this.kpiUserEvalutionRepository.findOne({
where: { id: id }, where: { id: id },
}); });
@ -1590,23 +1587,17 @@ export class KpiUserEvaluationController extends Controller {
evaluationResults: results == undefined ? "" : results.trim().toUpperCase(), evaluationResults: results == undefined ? "" : results.trim().toUpperCase(),
}, },
) )
.orderBy("kpiUserEvaluation.createdAt", "DESC") .orderBy("kpiUserEvaluation.createdAt", "DESC");
if (sortBy) { if (sortBy) {
if (["year", "durationKPI"].includes(sortBy)) { if (["year", "durationKPI"].includes(sortBy)) {
query = query.orderBy( query = query.orderBy(`kpiPeriod.${sortBy}`, descending ? "DESC" : "ASC");
`kpiPeriod.${sortBy}`, } else {
descending ? "DESC" : "ASC" query = query.orderBy(`kpiUserEvaluation.${sortBy}`, descending ? "DESC" : "ASC");
);
} else {
query = query.orderBy(
`kpiUserEvaluation.${sortBy}`,
descending ? "DESC" : "ASC"
);
}
} }
}
const [kpiUserEvaluation, total] = await query const [kpiUserEvaluation, total] = await query
.skip((page - 1) * pageSize) .skip((page - 1) * pageSize)
.take(pageSize) .take(pageSize)
.getManyAndCount(); .getManyAndCount();
@ -1905,23 +1896,23 @@ export class KpiUserEvaluationController extends Controller {
} else { } else {
item.evaluationReqEdit = requestBody.status.trim().toUpperCase(); item.evaluationReqEdit = requestBody.status.trim().toUpperCase();
item.evaluationStatus = "NEW"; item.evaluationStatus = "NEW";
await new CallAPI() await new CallAPI()
.PostData(request, "/placement/noti/profiles", { .PostData(request, "/placement/noti/profiles", {
subject: `คำขอแก้ไขข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลได้รับการพิจารณาแล้ว`, subject: `คำขอแก้ไขข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลได้รับการพิจารณาแล้ว`,
body: `คำขอแก้ไขข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลได้รับการพิจารณาแล้ว`, body: `คำขอแก้ไขข้อตกลงการประเมินผลการปฏิบัติราชการระดับบุคคลได้รับการพิจารณาแล้ว`,
receiverUserIds: [ receiverUserIds: [
{ {
receiverUserId: item.profileId, receiverUserId: item.profileId,
notiLink: `${process.env.VITE_URL_USER}/KPI-evaluator/${item.id}`, notiLink: `${process.env.VITE_URL_USER}/KPI-evaluator/${item.id}`,
}, },
], ],
payload: "", payload: "",
isSendMail: true, isSendMail: true,
isSendInbox: true, isSendInbox: true,
isSendNotification: true, isSendNotification: true,
}) })
.then(() => {}) .then(() => {})
.catch(() => {}); .catch(() => {});
} }
} else { } else {
item.evaluationReqEdit = requestBody.status.trim().toUpperCase(); item.evaluationReqEdit = requestBody.status.trim().toUpperCase();
@ -2305,41 +2296,41 @@ export class KpiUserEvaluationController extends Controller {
} }
const _null: any = null; const _null: any = null;
kpiUserEvaluation.evaluationStatus = "COMPLETE"; kpiUserEvaluation.evaluationStatus = "COMPLETE";
await new CallAPI() await new CallAPI();
if (kpiUserEvaluation.evaluatorId == null) { if (kpiUserEvaluation.evaluatorId == null) {
await new CallAPI() await new CallAPI()
.PostData(request, "/placement/noti/keycloak", { .PostData(request, "/placement/noti/keycloak", {
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`, subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`,
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`, body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`,
receiverUserId: "aec26ac3-417c-4cf9-9cbe-874939f99ecc", receiverUserId: "aec26ac3-417c-4cf9-9cbe-874939f99ecc",
payload: "", payload: "",
isSendMail: true, isSendMail: true,
isSendInbox: true, isSendInbox: true,
isSendNotification: true, isSendNotification: true,
}) })
.then(() => {}) .then(() => {})
.catch(() => {}); .catch(() => {});
kpiUserEvaluation.evaluationStatus = "COMPLETE"; kpiUserEvaluation.evaluationStatus = "COMPLETE";
} else { } else {
await new CallAPI() await new CallAPI()
.PostData(request, "/placement/noti/profile", { .PostData(request, "/placement/noti/profile", {
subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`, subject: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`,
body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`, body: `${kpiUserEvaluation.prefix}${kpiUserEvaluation.firstName} ${kpiUserEvaluation.lastName} ผู้ประเมินได้ให้ความเห็นโดยเห็นสมควรตามผลการประเมิน`,
receiverUserIds: [ receiverUserIds: [
{ {
receiverUserId: kpiUserEvaluation.evaluatorId, receiverUserId: kpiUserEvaluation.evaluatorId,
notiLink: `${process.env.VITE_URL_USER}/KPI-evaluator/${kpiUserEvaluation.id}`, notiLink: `${process.env.VITE_URL_USER}/KPI-evaluator/${kpiUserEvaluation.id}`,
}, },
], ],
payload: "", payload: "",
isSendMail: true, isSendMail: true,
isSendInbox: true, isSendInbox: true,
isSendNotification: true, isSendNotification: true,
}) })
.then(() => {}) .then(() => {})
.catch(() => {}); .catch(() => {});
kpiUserEvaluation.evaluationStatus = "COMPLETE"; kpiUserEvaluation.evaluationStatus = "COMPLETE";
} }
const before = structuredClone(kpiUserEvaluation); const before = structuredClone(kpiUserEvaluation);
kpiUserEvaluation.reasonReject = _null; kpiUserEvaluation.reasonReject = _null;

View file

@ -94,6 +94,15 @@ class CheckAuth {
child4: null, child4: null,
privilege: "ROOT", privilege: "ROOT",
}; };
} else if (privilege == "PARENT") {
data = {
root: [x.orgRootId],
child1: [null],
child2: null,
child3: null,
child4: null,
privilege: "PARENT",
};
} else if (privilege == "CHILD") { } else if (privilege == "CHILD") {
data = { data = {
root: node >= 0 ? [x.orgRootId] : null, root: node >= 0 ? [x.orgRootId] : null,
@ -103,6 +112,15 @@ class CheckAuth {
child4: node >= 4 ? [x.orgChild4Id] : null, child4: node >= 4 ? [x.orgChild4Id] : null,
privilege: "CHILD", privilege: "CHILD",
}; };
} else if (privilege == "BROTHER") {
data = {
// root: node >= 0 ? [x.orgRootId] : null,
root: node >= 0 ? [x.orgRootId] : null,
child1: node >= 2 ? [x.orgChild1Id] : null,
child2: node >= 3 ? [x.orgChild2Id] : null,
child3: node >= 4 ? [x.orgChild3Id] : null,
privilege: "BROTHER",
};
} else if (privilege == "NORMAL") { } else if (privilege == "NORMAL") {
data = { data = {
root: [x.orgRootId], root: [x.orgRootId],