diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 2790f38..5fce29f 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -11,6 +11,7 @@ import Extension from "../interfaces/extension"; import { DevelopmentScholarship } from "../entities/DevelopmentScholarship"; import { In, IsNull, Not } from "typeorm"; import { viewDevScholarship } from "../entities/view/viewDevScholarship"; +import { isNotEmittedStatement } from "typescript"; @Route("api/v1/development/report") @Tags("Report") @Security("bearerAuth") @@ -886,61 +887,96 @@ export class ReportController extends Controller { "ปริญญาเอก", "ปริญญาโท", "ปริญญาตรี", - "ปวส.", - "ปวช.", - "ม.6", - "ม.3", ]; - // const development = await this.viewDevScholarship.find({ + const development = await this.viewDevScholarship.find({ + where: { + rootId: Not(IsNull()), + degreeLevel: In(degree), + }, + }); - // }) - - - // const totalBudgetApprove = development.reduce((sum, item) => sum + Number(item.budgetApprove), 0); - // const formattedData = development.map((item, index) => { - // const rawPath = [ - // item.course == "-" ? null : item.course, - // item.field == "-" ? null : item.course - // ]; + const groupedData = development.reduce((acc:any, item:any) => { + const { rootId, root, degreeLevel, scholarshipType, budgetApprove } = item; - // const courseAndfield = rawPath - // .filter((path) => path !== undefined && path !== null) - // .join("/"); - - // const date = [ - // Extension.ToThaiNumber(Extension.ToThaiShortDate(item.startDate)), - // Extension.ToThaiNumber(Extension.ToThaiShortDate(item.endDate)) - // ]; - - // const dateDulation = date - // .filter((path) => path !== undefined && path !== null) - // .join(" - "); - - // return { - // no: Extension.ToThaiNumber((index + 1).toString()), - // id: item.id, - // rootId: item.rootId, - // root: item.root, - // degree: item.degreeLevel, - // // studyTopic: item.studyTopic ? item.studyTopic : "-", - // // fullName: item.prefix + item.firstName + " " + item.lastName, - // // position: item.position, - // // posLevel: item.posLevel ? item.posLevel.posLevelName : "-", - // // courseAndfield: courseAndfield ?? "-", - // // place: item.studyPlace ? item.studyPlace : "-", - // // country: item.studyCountry ? item.studyCountry : "-", - // // startAndendDate: dateDulation, - // // budgetApprove: item.budgetApprove ? Extension.ToThaiNumber(item.budgetApprove.toString()) : "-", - // }; - // }); + if (!acc[rootId]) { + acc[rootId] = { + root, + rootId, + degreeLevel1: { + numberOfRecords: 0, + numberOfScholarshipTypes: 0, + totalBudgetApprove: 0, + }, + degreeLevel2: { + numberOfRecords: 0, + numberOfScholarshipTypes: 0, + totalBudgetApprove: 0, + }, + degreeLevel3: { + numberOfRecords: 0, + numberOfScholarshipTypes: 0, + totalBudgetApprove: 0, + }, + }; + } + + if (degreeLevel === "ปริญญาตรี") { + acc[rootId].degreeLevel1.numberOfRecords += Number(item.numberOfRecords); + acc[rootId].degreeLevel1.numberOfScholarshipTypes += Number(item.numberOfScholarshipTypes); + acc[rootId].degreeLevel1.totalBudgetApprove += Number(item.totalBudgetApprove); + } else if (degreeLevel === "ปริญญาโท") { + acc[rootId].degreeLevel2.numberOfRecords += Number(item.numberOfRecords); + acc[rootId].degreeLevel2.numberOfScholarshipTypes += Number(item.numberOfScholarshipTypes); + acc[rootId].degreeLevel2.totalBudgetApprove += Number(item.totalBudgetApprove); + } else if (degreeLevel === "ปริญญาเอก") { + acc[rootId].degreeLevel3.numberOfRecords += Number(item.numberOfRecords); + acc[rootId].degreeLevel3.numberOfScholarshipTypes += Number(item.numberOfScholarshipTypes); + acc[rootId].degreeLevel3.totalBudgetApprove += Number(item.totalBudgetApprove); + } + + return acc; + }, {}); + const formattedData = Object.values(groupedData).map((item: any, index: any) => { + const sumnumberOfRecords = item.degreeLevel1.numberOfRecords + item.degreeLevel2.numberOfRecords + item.degreeLevel3.numberOfRecords; + const sumnumberOfScholarshipTypes = item.degreeLevel1.numberOfScholarshipTypes + item.degreeLevel2.numberOfScholarshipTypes + item.degreeLevel3.numberOfScholarshipTypes; + const sumtotalBudgetApprove = item.degreeLevel1.totalBudgetApprove + item.degreeLevel2.totalBudgetApprove + item.degreeLevel3.totalBudgetApprove; + + return { + no: index ? Extension.ToThaiNumber((index + 1).toString()) : "๑", + rootId: item.rootId ? item.rootId : "-", + root: item.root ? item.root : "-", + degreeLevel1: "ปริญญาตรี", + numberOfRecords1: item.degreeLevel1.numberOfRecords ? Extension.ToThaiNumber(item.degreeLevel1.numberOfRecords.toString()) : "-", + numberOfScholarshipTypes1: item.degreeLevel1.numberOfScholarshipTypes ? Extension.ToThaiNumber(item.degreeLevel1.numberOfScholarshipTypes.toString()) : "-", + totalBudgetApprove1: item.degreeLevel1.totalBudgetApprove ? Extension.ToThaiNumber(item.degreeLevel1.totalBudgetApprove.toLocaleString()) : "-", + + degreeLevel2: "ปริญญาโท", + numberOfRecords2: item.degreeLevel2.numberOfRecords ? Extension.ToThaiNumber(item.degreeLevel2.numberOfRecords.toString()) : "-", + numberOfScholarshipTypes2: item.degreeLevel2.numberOfScholarshipTypes ? Extension.ToThaiNumber(item.degreeLevel2.numberOfScholarshipTypes.toString()) : "-", + totalBudgetApprove2: item.degreeLevel2.totalBudgetApprove ? Extension.ToThaiNumber(item.degreeLevel2.totalBudgetApprove.toLocaleString()) : "-", + + degreeLevel3: "ปริญญาเอก", + numberOfRecords3: item.degreeLevel3.numberOfRecords ? Extension.ToThaiNumber(item.degreeLevel3.numberOfRecords.toString()) : "-", + numberOfScholarshipTypes3: item.degreeLevel3.numberOfScholarshipTypes ? Extension.ToThaiNumber(item.degreeLevel3.numberOfScholarshipTypes.toString()) : "-", + totalBudgetApprove3: item.degreeLevel3.totalBudgetApprove ? Extension.ToThaiNumber(item.degreeLevel3.totalBudgetApprove.toLocaleString()) : "-", + + totalNumberOfRecords: Extension.ToThaiNumber(sumnumberOfRecords.toString()), + totalNumberOfScholarshipTypes: Extension.ToThaiNumber(sumnumberOfScholarshipTypes.toString()), + totalTotalBudgetApprove: Extension.ToThaiNumber(sumtotalBudgetApprove.toLocaleString()) + }; + }); + const uniqueRoots = new Set(formattedData.map(item => item.root)); + const numberOfORG = uniqueRoots.size; + return new HttpSuccess({ template: "reportFund6", reportName: "reportFund6", data: { year: year?Extension.ToThaiNumber((year+543).toString()):"", - data: "", + data: formattedData, + coutOrg: numberOfORG?Extension.ToThaiNumber(numberOfORG.toString())+" หน่วยงาน":"๐ หน่วยงาน" }, }); }