From 10926c1c125499079e78ba0699e7c89255edea83 Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Tue, 28 Jan 2025 18:04:54 +0700 Subject: [PATCH] updated result & score --- src/controllers/ReportController.ts | 1180 +++++++++++++++------------ 1 file changed, 658 insertions(+), 522 deletions(-) diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 9b97ff0..33fea38 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -60,27 +60,29 @@ export class ReportController extends Controller { * */ @Get("") - async GetReport(@Query() assign_id: string) { + async GetReport(@Query() assign_id: string, evaluate_no: number = 1) { const evaluate = await this.evaluateChairmanRepository.findOne({ where: { assign_id }, }); const result = await this.evaluateResultRepository.findOne({ - where: { assign_id }, + where: { assign_id, no: evaluate_no.toString() }, }); if (!evaluate || !result) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลผลการทดลองปฏิบัติราชการ"); } - const develop_total_score = await (Number(evaluate.develop_orientation_score) + - Number(evaluate.develop_self_learning_score) + - Number(evaluate.develop_training_seminar_score) + - Number(evaluate.develop_other_training_score)); - const develop_total_percent = await (Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_orientation_percent) + - Number(evaluate.develop_self_learning_percent) + - Number(evaluate.develop_training_seminar_percent)); + const develop_total_score = + (await (Number(evaluate.develop_orientation_score) + + Number(evaluate.develop_self_learning_score) + + Number(evaluate.develop_training_seminar_score) + + Number(evaluate.develop_other_training_score))) / 4; + const develop_total_percent = + (await (Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_orientation_percent) + + Number(evaluate.develop_self_learning_percent) + + Number(evaluate.develop_training_seminar_percent))) / 4; const data = await { develop_orientation_score: evaluate.develop_orientation_score, @@ -1399,192 +1401,248 @@ export class ReportController extends Controller { @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date, ) { + interface Result { + [rootId: string]: { + rootName: string; + status1: number; + status2: number; + status3: number; + status4: number; + status5: number; + status6: number; + status7: number; + }; + } - interface Result { - [rootId: string]: { - rootName: string; - status1: number; - status2: number; - status3: number; - status4: number; - status5: number; - status6: number; - status7: number; - }; - } + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; - const rootNode = await new CallAPI() - .PostData(req, "/org/find/node-all",{nodeId: nodeId, node: node}) - .catch((error) => { - console.error("Error calling API:", error); - }); - const rootNodeTrue = rootNode["isRootTrue"]; - const rootNodeFalse = rootNode["isRootFalse"]; + let whereRootTrue = rootNodeTrue && rootNodeTrue.rootId ? { root: rootNodeTrue.rootId } : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, + }, + }) + : []; - let whereRootTrue = rootNodeTrue && rootNodeTrue.rootId ? { root: rootNodeTrue.rootId } : {}; - let listsRootTrue = rootNodeTrue && rootNodeTrue.rootId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : []; + let rootIds = rootNodeFalse.map((node: any) => node.rootId); + let listsRootFalse = + rootIds && rootIds.length + ? await this.personalRepository.find({ + where: { + root: In(rootIds), + createdAt: + startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, + }, + }) + : []; - let rootIds = rootNodeFalse.map((node: any) => node.rootId); - let listsRootFalse = rootIds && rootIds.length - ? await this.personalRepository.find({ - where: { - root: In(rootIds), - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : []; - - let resultTrue: Result = {}; - let resultFalse: Result = {}; + let resultTrue: Result = {}; + let resultFalse: Result = {}; - listsRootTrue.forEach(item => { - let rootId = item.root; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultTrue[rootId]) { - resultTrue[rootId] = { - "rootName": rootName, - "status1": 0, - "status2": 0, - "status3": 0, - "status4": 0, - "status5": 0, - "status6": 0, - "status7": 0 - }; - } - - if (status >= 1 && status <= 7) { - (resultTrue[rootId] as { [key: string]: any })[`status${status}`]++; - } - }); - listsRootFalse.forEach(item => { - let rootId = item.root; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultFalse[rootId]) { - resultFalse[rootId] = { - "rootName": rootName, - "status1": 0, - "status2": 0, - "status3": 0, - "status4": 0, - "status5": 0, - "status6": 0, - "status7": 0 - }; - } - - if (status >= 1 && status <= 7) { - (resultFalse[rootId] as { [key: string]: any })[`status${status}`]++; - } - }); - const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0); - const resultTrueExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0); - const resultTrueSuspension = "-"; - const resultTrueChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0); - const resultTrueResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0); - const resultTrueDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0); - const resultTrueNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0); - const resultFalsePass = Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const resultFalseExtand = Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const resultFalseSuspension = "-"; - const resultFalseChangePos = Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const resultFalseResign = Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const resultFalseDeceased = Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const resultFalseNotPass = Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumPass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const sumExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const sumSuspension = "-"; - const sumChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const sumResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const sumDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const sumNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumResultTrue = Object.values(resultTrue).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3; - }, 0); - const sumResultFalse = Object.values(resultFalse).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3; - }, 0); - const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; - const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - dateStart: startDate?Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)):"", - dateEnd: endDate?Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)):"", - resultTrueProbation: Object.keys(resultTrue).map((rootId,index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultTrue[rootId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo:(index + 1).toString(), - rootName:rootName.toString(), - pass:status2.toString(), - extand:status7.toString(), - suspension: "-", - changePos:status4.toString(), - resign:status5.toString(), - deceased:status6.toString(), - notPass:status3.toString(), - total:sum.toString() - }; - }), - resultTruePass:resultTruePass.toString(), - resultTrueExtand:resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos:resultTrueChangePos.toString(), - resultTrueResign:resultTrueResign.toString(), - resultTrueDeceased:resultTrueDeceased.toString(), - resultTrueNotPass:resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootId,index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultFalse[rootId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo:(index + 1).toString(), - rootName:rootName.toString(), - pass:status2.toString(), - extand:status7.toString(), - suspension: "-", - changePos:status4.toString(), - resign:status5.toString(), - deceased:status6.toString(), - notPass:status3.toString(), - total:sum.toString() - }; - }), - resultFalsePass:resultFalsePass.toString(), - resultFalseExtand:resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos:resultFalseChangePos.toString(), - resultFalseResign:resultFalseResign.toString(), - resultFalseDeceased:resultFalseDeceased.toString(), - resultFalseNotPass:resultFalseNotPass.toString(), - sumPass:sumPass.toString(), - sumExtand:sumExtand.toString(), - sumSuspension:"-", - sumChangePos:sumChangePos.toString(), - sumResign:sumResign.toString(), - sumDeceased:sumDeceased.toString(), - sumNotPass:sumNotPass.toString(), - sumResultTrue:sumResultTrue.toString(), - sumResultFalse:sumResultFalse.toString(), - sumAll:sumAll.toString() - }; - return new HttpSuccess({ - template: "placementProbation01", - reportName: "xlsx-report", - data: formattedData, - }); + listsRootTrue.forEach((item) => { + let rootId = item.root; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultTrue[rootId]) { + resultTrue[rootId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultTrue[rootId] as { [key: string]: any })[`status${status}`]++; + } + }); + listsRootFalse.forEach((item) => { + let rootId = item.root; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultFalse[rootId]) { + resultFalse[rootId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultFalse[rootId] as { [key: string]: any })[`status${status}`]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0, + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0, + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0, + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0, + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0, + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0, + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0, + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0, + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0, + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0, + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0, + ); + const sumPass = + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); + const sumExtand = + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); + const sumResign = + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); + const sumDeceased = + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); + const sumNotPass = + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return total + status2 + status7 + status4 + status5 + status6 + status3; + }, + 0, + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return total + status2 + status7 + status4 + status5 + status6 + status3; + }, + 0, + ); + const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", + dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", + resultTrueProbation: Object.keys(resultTrue).map((rootId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultTrue[rootId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map((rootId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultFalse[rootId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; + return new HttpSuccess({ + template: "placementProbation01", + reportName: "xlsx-report", + data: formattedData, + }); } @Get("report2") @@ -1596,214 +1654,235 @@ export class ReportController extends Controller { @Query("endDate") endDate?: Date, ) { let personal = null; - let result: Array = []; + let result: Array = []; switch (node) { case 0: { personal = await this.personalRepository.find({ - where: { + where: { root: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), }, }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); break; } case 1: { personal = await this.personalRepository.find({ - where: { + where: { child1: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), }, }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); break; } case 2: { personal = await this.personalRepository.find({ - where: { + where: { child2: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), }, }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); break; } case 3: { personal = await this.personalRepository.find({ - where: { + where: { child3: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), }, }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); break; } case 4: { personal = await this.personalRepository.find({ - where: { - child4: nodeId, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : Not(IsNull()), + where: { + child4: nodeId, + createdAt: + startDate && endDate + ? Between(new Date(startDate), new Date(endDate)) + : Not(IsNull()), }, }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); break; } default: { - personal = await this.personalRepository.find({ - }); - personal = await Promise.all(personal.map(async (p, idx) => { - const assigns = await this.assignRepository.find({ - where: { personal_id: p.personal_id } - }); - const no = (idx+1); - return { - no: no, - fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, - positionName: p.positionName, - organization: p.organization, - probation_status: p.probation_status, - idcard: p.idcard, - assigns: assigns - }; - })); + personal = await this.personalRepository.find({}); + personal = await Promise.all( + personal.map(async (p, idx) => { + const assigns = await this.assignRepository.find({ + where: { personal_id: p.personal_id }, + }); + const no = idx + 1; + return { + no: no, + fullName: `${p.prefixName}${p.firstName} ${p.lastName}`, + positionName: p.positionName, + organization: p.organization, + probation_status: p.probation_status, + idcard: p.idcard, + assigns: assigns, + }; + }), + ); } } result = await Promise.all( - personal.flatMap(x => - (x.assigns.length > 0 ? x.assigns : [{ id: null, date_start: null, date_finish: null }]) - .map(async (assign) => { + personal.flatMap((x) => + (x.assigns.length > 0 + ? x.assigns + : [{ id: null, date_start: null, date_finish: null }] + ).map(async (assign) => { + let accExam: string = ""; + let dateAppoint: Date | any = null; + await new CallAPI() + .GetData(req, `/placement/exam-probation/${x.idcard}`) + .then(async (x) => { + accExam = x.examName; + dateAppoint = x.dateAppoint; + }) + .catch((errr) => {}); - let accExam: string = ""; - let dateAppoint: Date | any = null; - await new CallAPI() - .GetData(req, `/placement/exam-probation/${x.idcard}`) - .then(async (x) => { - accExam = x.examName; - dateAppoint = x.dateAppoint; - }) - .catch((errr) => { - }); + const evaluateComman = await this.evaluateCommanderRepository.findOne({ + where: { assign_id: assign.id ?? "" }, + }); - const evaluateComman = await this.evaluateCommanderRepository.findOne({ - where: { assign_id: assign.id ?? "" }, - }); - - return { - no: Extension.ToThaiNumber(x.no.toString()), - accExam: accExam, - fullName: x.fullName, - positionName: x.positionName, - organization: x.organization, - dateAppoint: dateAppoint - ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) - : "", - dateStart: (x.assigns.length > 0 && assign.date_start != null) + return { + no: Extension.ToThaiNumber(x.no.toString()), + accExam: accExam, + fullName: x.fullName, + positionName: x.positionName, + organization: x.organization, + dateAppoint: dateAppoint + ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(dateAppoint)) + : "", + dateStart: + x.assigns.length > 0 && assign.date_start != null ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_start)) : "", - dateFinish: (x.assigns.length > 0 && assign.date_finish != null) + dateFinish: + x.assigns.length > 0 && assign.date_finish != null ? Extension.ToThaiNumber(Extension.ToThaiFullDate2(assign.date_finish)) : "", - day: (x.assigns.length > 0 && assign.date_start != null && assign.date_finish != null) - ? Extension.ToThaiNumber(`${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน`) + day: + x.assigns.length > 0 && assign.date_start != null && assign.date_finish != null + ? Extension.ToThaiNumber( + `${Math.ceil((new Date(assign.date_finish).getTime() - new Date(assign.date_start).getTime()) / (1000 * 60 * 60 * 24))} วัน`, + ) : "", - status: x.probation_status - ? Extension.probationStatus(x.probation_status) - : "", - orientation: evaluateComman && evaluateComman?.orientation == 1 - ? "☑" - : "☐", - learning: evaluateComman && evaluateComman?.self_learning == 1 - ? "☑" - : "☐", - seminar: evaluateComman && evaluateComman?.training_seminar == 1 - ? "☑" - : "☐", - other: evaluateComman && evaluateComman?.other_training == 1 - ? "☑" - : "☐", - }; - }) - ) + status: x.probation_status ? Extension.probationStatus(x.probation_status) : "", + orientation: evaluateComman && evaluateComman?.orientation == 1 ? "☑" : "☐", + learning: evaluateComman && evaluateComman?.self_learning == 1 ? "☑" : "☐", + seminar: evaluateComman && evaluateComman?.training_seminar == 1 ? "☑" : "☐", + other: evaluateComman && evaluateComman?.other_training == 1 ? "☑" : "☐", + }; + }), + ), ); return new HttpSuccess({ template: "placementProbation02", reportName: "xlsx-report", data: { - date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date))}`, + date: `ตั้งแต่${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(startDate ?? new Date()))} ถึง ${Extension.ToThaiNumber(Extension.ToThaiNoprefixDate2(endDate ?? new Date()))}`, dateCurrent: `ณ ${Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date()))}`, - data: result + data: result, }, }); } @@ -1816,187 +1895,244 @@ export class ReportController extends Controller { @Query("startDate") startDate?: Date, @Query("endDate") endDate?: Date, ) { - interface Result { - [rootId: string]: { - rootName: string; - status1: number; - status2: number; - status3: number; - status4: number; - status5: number; - status6: number; - status7: number; - }; - } + interface Result { + [rootId: string]: { + rootName: string; + status1: number; + status2: number; + status3: number; + status4: number; + status5: number; + status6: number; + status7: number; + }; + } - const rootNode = await new CallAPI() - .PostData(req, "/org/find/node-all",{nodeId: nodeId, node: node}) - .catch((error) => { - console.error("Error calling API:", error); - }); - const rootNodeTrue = rootNode["isRootTrue"]; - const rootNodeFalse = rootNode["isRootFalse"]; + const rootNode = await new CallAPI() + .PostData(req, "/org/find/node-all", { nodeId: nodeId, node: node }) + .catch((error) => { + console.error("Error calling API:", error); + }); + const rootNodeTrue = rootNode["isRootTrue"]; + const rootNodeFalse = rootNode["isRootFalse"]; - let whereRootTrue = rootNodeTrue && rootNodeTrue.rootId ? { root: rootNodeTrue.rootId } : {}; - let listsRootTrue = rootNodeTrue && rootNodeTrue.rootId - ? await this.personalRepository.find({ - where: { - ...whereRootTrue, - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : []; + let whereRootTrue = rootNodeTrue && rootNodeTrue.rootId ? { root: rootNodeTrue.rootId } : {}; + let listsRootTrue = + rootNodeTrue && rootNodeTrue.rootId + ? await this.personalRepository.find({ + where: { + ...whereRootTrue, + createdAt: + startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, + }, + }) + : []; - let rootIds = rootNodeFalse.map((node: any) => node.rootId); - let listsRootFalse = rootIds && rootIds.length - ? await this.personalRepository.find({ - where: { - root: In(rootIds), - createdAt: startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, - }, - }) - : []; - - let resultTrue: Result = {}; - let resultFalse: Result = {}; + let rootIds = rootNodeFalse.map((node: any) => node.rootId); + let listsRootFalse = + rootIds && rootIds.length + ? await this.personalRepository.find({ + where: { + root: In(rootIds), + createdAt: + startDate && endDate ? Between(new Date(startDate), new Date(endDate)) : undefined, + }, + }) + : []; - listsRootTrue.forEach(item => { - let rootId = item.root; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultTrue[rootId]) { - resultTrue[rootId] = { - "rootName": rootName, - "status1": 0, - "status2": 0, - "status3": 0, - "status4": 0, - "status5": 0, - "status6": 0, - "status7": 0 - }; - } - - if (status >= 1 && status <= 7) { - (resultTrue[rootId] as { [key: string]: any })[`status${status}`]++; - } - }); - listsRootFalse.forEach(item => { - let rootId = item.root; - let status = item.probation_status; - let rootName = item.orgRootName; - - if (!resultFalse[rootId]) { - resultFalse[rootId] = { - "rootName": rootName, - "status1": 0, - "status2": 0, - "status3": 0, - "status4": 0, - "status5": 0, - "status6": 0, - "status7": 0 - }; - } - - if (status >= 1 && status <= 7) { - (resultFalse[rootId] as { [key: string]: any })[`status${status}`]++; - } - }); - const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0); - const resultTrueExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0); - const resultTrueSuspension = "-"; - const resultTrueChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0); - const resultTrueResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0); - const resultTrueDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0); - const resultTrueNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0); - const resultFalsePass = Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const resultFalseExtand = Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const resultFalseSuspension = "-"; - const resultFalseChangePos = Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const resultFalseResign = Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const resultFalseDeceased = Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const resultFalseNotPass = Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumPass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); - const sumExtand = Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); - const sumSuspension = "-"; - const sumChangePos = Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); - const sumResign = Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); - const sumDeceased = Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); - const sumNotPass = Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); - const sumResultTrue = Object.values(resultTrue).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3; - }, 0); - const sumResultFalse = Object.values(resultFalse).reduce((total, { status2, status7, status4, status5, status6, status3 }) => { - return total + status2 + status7 + status4 + status5 + status6 + status3; - }, 0); - const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; - const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); - const formattedData = { - topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", - dateNow: nowDate, - accExam: "", - dateStart: startDate?Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)):"", - dateEnd: endDate?Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)):"", - resultTrueProbation: Object.keys(resultTrue).map((rootId,index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultTrue[rootId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo:(index + 1).toString(), - rootName:rootName.toString(), - pass:status2.toString(), - extand:status7.toString(), - suspension: "-", - changePos:status4.toString(), - resign:status5.toString(), - deceased:status6.toString(), - notPass:status3.toString(), - total:sum.toString() - }; - }), - resultTruePass:resultTruePass.toString(), - resultTrueExtand:resultTrueExtand.toString(), - resultTrueSuspension: "-", - resultTrueChangePos:resultTrueChangePos.toString(), - resultTrueResign:resultTrueResign.toString(), - resultTrueDeceased:resultTrueDeceased.toString(), - resultTrueNotPass:resultTrueNotPass.toString(), - topic2: "หน่วยงานระดับสำนักงานเขต", - resultFalseProbation: Object.keys(resultFalse).map((rootId,index) => { - const { status2, status7, status4, status5, status6, status3, rootName } = resultFalse[rootId]; - const sum = status2 + status7 + status4 + status5 + status6 + status3; - return { - rowNo:(index + 1).toString(), - rootName:rootName.toString(), - pass:status2.toString(), - extand:status7.toString(), - suspension: "-", - changePos:status4.toString(), - resign:status5.toString(), - deceased:status6.toString(), - notPass:status3.toString(), - total:sum.toString() - }; - }), - resultFalsePass:resultFalsePass.toString(), - resultFalseExtand:resultFalseExtand.toString(), - resultFalseSuspension: "-", - resultFalseChangePos:resultFalseChangePos.toString(), - resultFalseResign:resultFalseResign.toString(), - resultFalseDeceased:resultFalseDeceased.toString(), - resultFalseNotPass:resultFalseNotPass.toString(), - sumPass:sumPass.toString(), - sumExtand:sumExtand.toString(), - sumSuspension:"-", - sumChangePos:sumChangePos.toString(), - sumResign:sumResign.toString(), - sumDeceased:sumDeceased.toString(), - sumNotPass:sumNotPass.toString(), - sumResultTrue:sumResultTrue.toString(), - sumResultFalse:sumResultFalse.toString(), - sumAll:sumAll.toString() - }; + let resultTrue: Result = {}; + let resultFalse: Result = {}; + + listsRootTrue.forEach((item) => { + let rootId = item.root; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultTrue[rootId]) { + resultTrue[rootId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultTrue[rootId] as { [key: string]: any })[`status${status}`]++; + } + }); + listsRootFalse.forEach((item) => { + let rootId = item.root; + let status = item.probation_status; + let rootName = item.orgRootName; + + if (!resultFalse[rootId]) { + resultFalse[rootId] = { + rootName: rootName, + status1: 0, + status2: 0, + status3: 0, + status4: 0, + status5: 0, + status6: 0, + status7: 0, + }; + } + + if (status >= 1 && status <= 7) { + (resultFalse[rootId] as { [key: string]: any })[`status${status}`]++; + } + }); + const resultTruePass = Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0); + const resultTrueExtand = Object.values(resultTrue).reduce( + (sum, { status7 }) => sum + status7, + 0, + ); + const resultTrueSuspension = "-"; + const resultTrueChangePos = Object.values(resultTrue).reduce( + (sum, { status4 }) => sum + status4, + 0, + ); + const resultTrueResign = Object.values(resultTrue).reduce( + (sum, { status5 }) => sum + status5, + 0, + ); + const resultTrueDeceased = Object.values(resultTrue).reduce( + (sum, { status6 }) => sum + status6, + 0, + ); + const resultTrueNotPass = Object.values(resultTrue).reduce( + (sum, { status3 }) => sum + status3, + 0, + ); + const resultFalsePass = Object.values(resultFalse).reduce( + (sum, { status2 }) => sum + status2, + 0, + ); + const resultFalseExtand = Object.values(resultFalse).reduce( + (sum, { status7 }) => sum + status7, + 0, + ); + const resultFalseSuspension = "-"; + const resultFalseChangePos = Object.values(resultFalse).reduce( + (sum, { status4 }) => sum + status4, + 0, + ); + const resultFalseResign = Object.values(resultFalse).reduce( + (sum, { status5 }) => sum + status5, + 0, + ); + const resultFalseDeceased = Object.values(resultFalse).reduce( + (sum, { status6 }) => sum + status6, + 0, + ); + const resultFalseNotPass = Object.values(resultFalse).reduce( + (sum, { status3 }) => sum + status3, + 0, + ); + const sumPass = + Object.values(resultTrue).reduce((sum, { status2 }) => sum + status2, 0) + + Object.values(resultFalse).reduce((sum, { status2 }) => sum + status2, 0); + const sumExtand = + Object.values(resultTrue).reduce((sum, { status7 }) => sum + status7, 0) + + Object.values(resultFalse).reduce((sum, { status7 }) => sum + status7, 0); + const sumSuspension = "-"; + const sumChangePos = + Object.values(resultTrue).reduce((sum, { status4 }) => sum + status4, 0) + + Object.values(resultFalse).reduce((sum, { status4 }) => sum + status4, 0); + const sumResign = + Object.values(resultTrue).reduce((sum, { status5 }) => sum + status5, 0) + + Object.values(resultFalse).reduce((sum, { status5 }) => sum + status5, 0); + const sumDeceased = + Object.values(resultTrue).reduce((sum, { status6 }) => sum + status6, 0) + + Object.values(resultFalse).reduce((sum, { status6 }) => sum + status6, 0); + const sumNotPass = + Object.values(resultTrue).reduce((sum, { status3 }) => sum + status3, 0) + + Object.values(resultFalse).reduce((sum, { status3 }) => sum + status3, 0); + const sumResultTrue = Object.values(resultTrue).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return total + status2 + status7 + status4 + status5 + status6 + status3; + }, + 0, + ); + const sumResultFalse = Object.values(resultFalse).reduce( + (total, { status2, status7, status4, status5, status6, status3 }) => { + return total + status2 + status7 + status4 + status5 + status6 + status3; + }, + 0, + ); + const sumAll = sumPass + sumExtand + sumChangePos + sumResign + sumDeceased + sumNotPass; + const nowDate = Extension.ToThaiNumber(Extension.ToThaiShortDate(new Date())); + const formattedData = { + topic: "หน่วยงานระดับสำนักหรือเทียบเท่า", + dateNow: nowDate, + accExam: "", + dateStart: startDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(startDate)) : "", + dateEnd: endDate ? Extension.ToThaiNumber(Extension.ToThaiNoprefixDate(endDate)) : "", + resultTrueProbation: Object.keys(resultTrue).map((rootId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultTrue[rootId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultTruePass: resultTruePass.toString(), + resultTrueExtand: resultTrueExtand.toString(), + resultTrueSuspension: "-", + resultTrueChangePos: resultTrueChangePos.toString(), + resultTrueResign: resultTrueResign.toString(), + resultTrueDeceased: resultTrueDeceased.toString(), + resultTrueNotPass: resultTrueNotPass.toString(), + topic2: "หน่วยงานระดับสำนักงานเขต", + resultFalseProbation: Object.keys(resultFalse).map((rootId, index) => { + const { status2, status7, status4, status5, status6, status3, rootName } = + resultFalse[rootId]; + const sum = status2 + status7 + status4 + status5 + status6 + status3; + return { + rowNo: (index + 1).toString(), + rootName: rootName.toString(), + pass: status2.toString(), + extand: status7.toString(), + suspension: "-", + changePos: status4.toString(), + resign: status5.toString(), + deceased: status6.toString(), + notPass: status3.toString(), + total: sum.toString(), + }; + }), + resultFalsePass: resultFalsePass.toString(), + resultFalseExtand: resultFalseExtand.toString(), + resultFalseSuspension: "-", + resultFalseChangePos: resultFalseChangePos.toString(), + resultFalseResign: resultFalseResign.toString(), + resultFalseDeceased: resultFalseDeceased.toString(), + resultFalseNotPass: resultFalseNotPass.toString(), + sumPass: sumPass.toString(), + sumExtand: sumExtand.toString(), + sumSuspension: "-", + sumChangePos: sumChangePos.toString(), + sumResign: sumResign.toString(), + sumDeceased: sumDeceased.toString(), + sumNotPass: sumNotPass.toString(), + sumResultTrue: sumResultTrue.toString(), + sumResultFalse: sumResultFalse.toString(), + sumAll: sumAll.toString(), + }; return new HttpSuccess({ template: "placementProbation03", reportName: "xlsx-report",