import { Controller, Get, Post, Put, Delete, Route, Security, Tags, Body, Path, Request, Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; import { Brackets, Not } from "typeorm"; import HttpSuccess from "../interfaces/http-success"; import HttpError from "../interfaces/http-error"; import HttpStatusCode from "../interfaces/http-status"; import { KpiPeriod } from "../entities/kpiPeriod"; import { KpiUserEvaluation } from "../entities/kpiUserEvaluation"; @Route("api/v1/kpi/report") @Tags("Report") @Security("bearerAuth") export class ReportController extends Controller { private kpiPeriodRepository = AppDataSource.getRepository(KpiPeriod); private kpiUserEvaluationRepository = AppDataSource.getRepository(KpiUserEvaluation); @Post("announcement/{id}") async GetReportAnnouncement( @Path() id: string, @Body() requestBody: { root: string; periodId: string }, ) { const getEvaluations = await this.kpiUserEvaluationRepository.find({ where: { kpiPeriodId: id }, }); const getPeriod = await this.kpiPeriodRepository.findOne({ where: { id: id }, }); if (!getEvaluations || getEvaluations.length === 0) { console.log("No evaluations found for the given kpiPeriodId: ", id); return; } if (!getPeriod) { console.log("No period data found for the given id: ", id); return; } const formattedData = getEvaluations.map((evaluation) => ({ periodId: requestBody.periodId, root: requestBody.root, fullName: `${evaluation.prefix} ${evaluation.firstName} ${evaluation.lastName}`, position: evaluation.position, posLevel: evaluation.posLevelName, announceYear: getPeriod.year, result: "ดีเด่น", oc: "test", organizationName: "test", announceDate: "testDATE", roundNo: "1", })); return new HttpSuccess({ template: "announce", reportName: "announce", data: formattedData, }); } }