diff --git a/src/controllers/ReportController.ts b/src/controllers/ReportController.ts index 5aaa802..9c367fe 100644 --- a/src/controllers/ReportController.ts +++ b/src/controllers/ReportController.ts @@ -586,11 +586,23 @@ export class ReportController extends Controller { .orderBy("developmentScholarship.scholarshipYear", "DESC") .addOrderBy("developmentScholarship.createdAt", "DESC") .getMany(); - + const mapData = developments.map((item, idx:number) => ({ no: Extension.ToThaiNumber((idx+1).toString()), institution: item.educationalInstitution ? item.educationalInstitution : "-", - scholarshipType: item.scholarshipType ? item.scholarshipType : "-", + scholarshipType: item.scholarshipType ? + item.scholarshipType == "DOMESTICE" + ? "การศึกษาในประเทศ" + : item.scholarshipType == "NOABROAD" + ? "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่ไม่มีการไปต่างประเทศ)" + : item.scholarshipType == "ABROAD" + ? "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรที่มีการไปต่างประเทศ)" + : item.scholarshipType == "EXECUTIVE" + ? "ฝึกอบรมในประเทศที่ส่งไปพัฒนากับหน่วยวงานภายนอก (หลักสูตรประเภทนักบริหาร)" + : item.scholarshipType == "RESEARCH" + ? "ศึกษา ฝึกอบรม ประชุม ดูงาน และปฏิบัติการวิจัย ณ ต่างประเทศ" + : "-" + : "-", degreeLevel: item.degreeLevel ? item.degreeLevel : "-", course: item.course ? item.course : "-", field: item.field ? item.field : "-", @@ -598,7 +610,7 @@ export class ReportController extends Controller { position: item.position ? item.position : "-", posLevel: item.posLevel ? item.posLevel.posLevelName : "-", totalPeriod: item.totalPeriod ? item.totalPeriod : "-", - budgetApprove: item.budgetApprove ? Extension.ToThaiNumber(item.budgetApprove.toString()) : "๐" //toLocaleString + budgetApprove: item.budgetApprove ? Extension.ToThaiNumber(item.budgetApprove.toLocaleString()) : "๐" })); const sum = developments @@ -610,7 +622,7 @@ export class ReportController extends Controller { reportName: "reportFund3", data: { year: year ? Extension.ToThaiNumber((year+543).toString()) : "-", - root: developments.length > 0 ? developments[0].root : "-", + root: rootId ? developments.length > 0 ? developments.find(x => x.root != "")?.root: "-" : "-", data: mapData.length > 0 ? mapData : [{ @@ -626,7 +638,7 @@ export class ReportController extends Controller { totalPeriod: "-", budgetApprove: "-", }], - sum: sum ? Extension.ToThaiNumber(sum.toString()): "-" + sum: sum ? Extension.ToThaiNumber(sum.toLocaleString()): "-" }, }); } @@ -637,14 +649,143 @@ export class ReportController extends Controller { * */ @Get("report4") - async report4() { + async report4( + @Query("year") year: number, + ) { + const developments = await AppDataSource.getRepository(DevelopmentScholarship) + .createQueryBuilder("developmentScholarship") + .andWhere( + year !== 0 && year != null && year != undefined + ? "developmentScholarship.scholarshipYear = :scholarshipYear" + : "1=1", + { scholarshipYear: year }, + ) + .orderBy("developmentScholarship.scholarshipYear", "DESC") + .addOrderBy("developmentScholarship.createdAt", "DESC") + .getMany(); + // const _develop = await this.developmentScholarshipRepository.find({ + // where: { + // scholarshipYear: year ? year : Not(IsNull()) + // }, + // order: { "scholarshipYear" : "DESC" } + // }) + const groupDevelopment = Array.isArray(developments) && developments.length > 0 + ? developments.reduce((acc:any, current:any, idx:number) => { + const root = current.root || ""; + if (!acc[root]) { + acc[root] = { + // rootId, + no: (idx+1), + root: root, + Bachelor : 0, + BachelorHight: 0, + Master: 0, + Doctor: 0, + DomesticeCourseCount: 0, + DomesticeProfileCount: 0, + DomesticeBudgetApprove: 0, + NoAbroadCourseCount: 0, + NoAbroadDProfileCount: 0, + NoAbroadBudgetApprove: 0, + AbroadCourseCount: 0, + AbroadProfileCount: 0, + AbroadBudgetApprove: 0, + ExecutiveCourseCount: 0, + ExecutiveProfileCount: 0, + ExecutiveBudgetApprove: 0, + TotalCourseCount: 0, + TotalProfileCount: 0, + TotalBudgetApprove: 0, + }; + } + + switch (current.scholarshipType) { + case "DOMESTICE": + acc[root].DomesticeCourseCount++; + acc[root].DomesticeProfileCount++; + acc[root].DomesticeBudgetApprove += current.budgetApprove || 0; + break; + case "NOABROAD": + acc[root].NoAbroadCourseCount++; + acc[root].NoAbroadProfileCount++; + acc[root].NoAbroadBudgetApprove += current.budgetApprove || 0; + break; + case "ABROAD": + acc[root].AbroadCourseCount++; + acc[root].AbroadProfileCount++; + acc[root].AbroadBudgetApprove += current.budgetApprove || 0; + break; + case "EXECUTIVE": + acc[root].ExecutiveCourseCount++; + acc[root].ExecutiveProfileCount++; + acc[root].ExecutiveBudgetApprove += current.budgetApprove || 0; + break; + } + + acc[root].TotalCourseCount = acc[root].DomesticeCourseCount + acc[root].NoAbroadCourseCount + acc[root].AbroadCourseCount + acc[root].ExecutiveCourseCount; + acc[root].TotalProfileCount = acc[root].DomesticeProfileCount + acc[root].NoAbroadProfileCount + acc[root].AbroadProfileCount + acc[root].ExecutiveProfileCount; + acc[root].TotalBudgetApprove = acc[root].DomesticeBudgetApprove + acc[root].NoAbroadBudgetApprove + acc[root].AbroadBudgetApprove + acc[root].ExecutiveBudgetApprove; + + return acc; + }, {}) + : []; + + const _group = Object.values(groupDevelopment); return new HttpSuccess({ template: "reportFund4", reportName: "reportFund4", data: { - data: "", + year: year ? Extension.ToThaiNumber((year+543).toString()) : "-", + data: Array.isArray(_group) + ? _group.map((x:any, idx:number) => ({ + // no: Extension.ToThaiNumber((idx+1).toString()), + // root: x.root ? x.root : "-", + // Bachelor : "-", + // BachelorHight: "-", + // Master: "-", + // Doctor: "-", + // DomesticeCourseCount: x.DomesticeCourseCount ? Extension.ToThaiNumber(x.DomesticeCourseCount) : "๐", + // DomesticeProfileCount: x.DomesticeProfileCount ? Extension.ToThaiNumber(x.DomesticeProfileCount) : "๐", + // DomesticeBudgetApprove: x.DomesticeBudgetApprove ? Extension.ToThaiNumber(x.DomesticeBudgetApprove) : "๐", + // NoAbroadCourseCount: x.NoAbroadCourseCount ? Extension.ToThaiNumber(x.NoAbroadCourseCount) : "๐", + // NoAbroadDProfileCount: x.NoAbroadDProfileCount ? Extension.ToThaiNumber(x.NoAbroadDProfileCount) : "๐", + // NoAbroadBudgetApprove: x.NoAbroadBudgetApprove ? Extension.ToThaiNumber(x.NoAbroadBudgetApprove) : "๐", + // AbroadCourseCount: x.AbroadCourseCount ? Extension.ToThaiNumber(x.AbroadCourseCount) : "๐", + // AbroadProfileCount: x.AbroadProfileCount ? Extension.ToThaiNumber(x.AbroadProfileCount) : "๐", + // AbroadBudgetApprove: x.AbroadBudgetApprove ? Extension.ToThaiNumber(x.AbroadBudgetApprove) : "๐", + // ExecutiveCourseCount: x.ExecutiveCourseCount ? Extension.ToThaiNumber(x.ExecutiveCourseCount) : "๐", + // ExecutiveProfileCount: x.ExecutiveProfileCount ? Extension.ToThaiNumber(x.ExecutiveProfileCount) : "๐", + // ExecutiveBudgetApprove: x.ExecutiveBudgetApprove ? Extension.ToThaiNumber(x.ExecutiveBudgetApprove) : "๐", + // TotalCourseCount: x.TotalCourseCount ? Extension.ToThaiNumber(x.TotalCourseCount) : "๐", + // TotalProfileCount: x.TotalProfileCount ? Extension.ToThaiNumber(x.TotalProfileCount) : "๐", + // TotalBudgetApprove: x.TotalBudgetApprove ? Extension.ToThaiNumber(x.TotalBudgetApprove) : "๐", + })) + : [{ + no: "-", + root: "-", + Bachelor : "-", + BachelorHight: "-", + Master: "-", + Doctor: "-", + DomesticeCourseCount: "-", + DomesticeProfileCount: "-", + DomesticeBudgetApprove: "-", + NoAbroadCourseCount: "-", + NoAbroadDProfileCount: "-", + NoAbroadBudgetApprove: "-", + AbroadCourseCount: "-", + AbroadProfileCount: "-", + AbroadBudgetApprove: "-", + ExecutiveCourseCount: "-", + ExecutiveProfileCount: "-", + ExecutiveBudgetApprove: "-", + TotalCourseCount: "-", + TotalProfileCount: "-", + TotalBudgetApprove: "-", + }], + totalRoot: Array.isArray(_group) ? Extension.ToThaiNumber(_group.length.toLocaleString()) : "-" }, }); }