This commit is contained in:
AdisakKanthawilang 2025-01-17 20:02:52 +07:00
parent 3f988d8bb6
commit 005e7582bf

View file

@ -9,6 +9,7 @@ import { PosType } from "../entities/PosType";
import { PosLevel } from "../entities/PosLevel";
import Extension from "../interfaces/extension";
import { DevelopmentScholarship } from "../entities/DevelopmentScholarship";
import { IsNull, Not } from "typeorm";
@Route("api/v1/development/report")
@Tags("Report")
@Security("bearerAuth")
@ -24,16 +25,228 @@ export class ReportController extends Controller {
*/
@Get("main")
async GetReportDevelopemtMain(/*@Path() type: string*/) {
// const _type = type.trim().toUpperCase();
const formattedData = {
org: "_type",
};
//ตารางรายละเอียด กับ แบบรายงาน
const dataDevelopment = await AppDataSource.getRepository(Development)
.createQueryBuilder("development")
.leftJoinAndSelect("development.developmentHistorys", "history")
.leftJoinAndSelect("development.developmentPlannedGoals", "planGoals")
.leftJoinAndSelect("development.strategyChild1Actual", "strategy1")
.leftJoinAndSelect("development.strategyChild2Actual", "strategy2")
.leftJoinAndSelect("development.strategyChild3Actual", "strategy3")
.leftJoinAndSelect("development.strategyChild4Actual", "strategy4")
.leftJoinAndSelect("development.strategyChild5Actual", "strategy5")
.where("development.status = :status", { status: "FINISH" })
.andWhere("development.strategyChild1ActualId IS NOT NULL")
.select([
"development.id AS id",
"development.projectName AS projectName",
"development.year AS year",
"development.totalDate AS totalDate",
"development.budget AS budget",
"SUM(DISTINCT planGoals.amount) AS goalParticipants",
"COUNT(DISTINCT history.id) AS actualParticipants",
"strategy1.strategyChild1Name AS strategy1",
"strategy2.strategyChild2Name AS strategy2",
"strategy3.strategyChild3Name AS strategy3",
"strategy4.strategyChild4Name AS strategy4",
"strategy5.strategyChild5Name AS strategy5",
"development.accept AS acceptBudget",
"development.receive AS receiveBudget",
"development.obstacle AS obstacle",
"development.root AS root",
])
.groupBy("development.id")
.getRawMany();
const mappedDataDev = dataDevelopment.map((item, index) => {
let budget = null;
if (item.budget == "REGULATIONBUDGET") {
budget = "งบตามข้อบัญญัติ";
}else if (item.budget == "OTHERBUDGET") {
budget = "เงินนอกงบประมาณ";
}else if (item.budget == "BANGKOKBUDGET") {
budget = "ไม่ใช้งบประมาณ";
}
return {
strategy: item.strategy1,
projectName: item.projectName,
totalDate: item.totalDate != null && item.totalDate != "" ? Extension.ToThaiNumber(item.totalDate.toString()): "-",
goalParticipants: item.goalParticipants != null && item.goalParticipants != "" ? Extension.ToThaiNumber(item.goalParticipants.toString()): "-",
actualParticipants: item.actualParticipants != null && item.actualParticipants != "" ? Extension.ToThaiNumber(item.actualParticipants.toString()): "-",
budget: budget,
acceptBudget: item.acceptBudget != null && item.acceptBudget != "" ? Extension.ToThaiNumber(item.acceptBudget.toString()): "-",
receiveBudget: item.receiveBudget != null && item.receiveBudget != "" ? Extension.ToThaiNumber(item.receiveBudget.toString()): "-",
obstacle: item.obstacle,
root: item.root,
output: "-",
outcome: "-",
position: "-",
indicators: "-",
devResult: "-",
positionActual: "-",
};
});
const resultAllStrategy = await AppDataSource.getRepository(Development)
.createQueryBuilder("development")
.leftJoinAndSelect("development.strategyChild1Actual", "strategy1")
.where("development.status = :status", { status: "FINISH" })
.andWhere("development.strategyChild1ActualId IS NOT NULL")
.select([
"development.rootId AS rootId",
"development.strategyChild1ActualId AS strategyId",
"strategy1.strategyChild1Name AS strategyName",
"COUNT(development.id) AS devCount",
"SUM(development.receive) AS receiveBudget",
"development.root AS root",
])
.groupBy("development.rootId, development.strategyChild1ActualId, strategy1.strategyChild1Name, development.root")
.orderBy("strategy1.createdAt", "ASC")
.getRawMany();
interface Strategy {
strategyId: string;
strategyName: string;
devCount: string;
receiveBudget: string;
sumDev: string;
sumTraget: string;
sumBudget: string;
sumRowDev: string,
sumRowTarget: string,
sumRowBudget: string,
}
interface GroupedData {
rootId: string;
root: string;
strategy: Strategy[];
}
// สมมติว่า 'resultAllStrategy' ถูกกำหนดไว้แล้วและมีข้อมูลที่คุณให้มา
const groupedData: GroupedData[] = resultAllStrategy.reduce((acc: GroupedData[], item) => {
const existingRoot = acc.find(entry => entry.rootId === item.rootId);
if (existingRoot) {
existingRoot.strategy.push({
strategyId: item.strategyId,
strategyName: item.strategyName,
devCount: item.devCount?Extension.ToThaiNumber(item.devCount.toString()):"0",
receiveBudget: item.receiveBudget?Extension.ToThaiNumber(item.receiveBudget.toString()):"0",
sumDev: "",
sumTraget: "",
sumBudget: "",
sumRowDev:"",
sumRowTarget:"",
sumRowBudget:"",
});
} else {
acc.push({
rootId: item.rootId,
root: item.root,
strategy: [{
strategyId: item.strategyId,
strategyName: item.strategyName,
devCount: item.devCount?Extension.ToThaiNumber(item.devCount.toString()):"0",
receiveBudget: item.receiveBudget?Extension.ToThaiNumber(item.receiveBudget.toString()):"0",
sumDev: "",
sumTraget: "",
sumBudget: "",
sumRowDev:"",
sumRowTarget:"",
sumRowBudget:"",
}]
});
}
return acc;
}, []);
// ตอนนี้คุณสามารถ map ข้อมูลใน 'groupedData' เพื่อสร้าง 'formattedData' ได้แล้ว
const reformattedData = groupedData.map((group,x) => {
const formattedGroup = {
rowNo: x?Extension.ToThaiNumber((x + 1).toString()):Extension.ToThaiNumber("๑"),
rootId: group.rootId,
root: group.root,
strategy: Array(4).fill(null).map((_, index) => {
const strategy = group.strategy[index] || {
strategyName: "0",
devCount: "0",
target: "0",
receiveBudget: "0",
sumDev: "0",
sumTraget: "0",
sumBudget: "0",
sumRowDev:"0",
sumRowTarget:"0",
sumRowBudget:"0",
};
return {
[`strategyName${index + 1}`]: strategy.strategyName ?? "0",
[`devCount${index + 1}`]: strategy.devCount ?? "0",
[`target${index + 1}`]: "0",
[`receiveBudget${index + 1}`]: strategy.receiveBudget ?? "0",
[`sumDev${index + 1}`]: strategy.sumDev ?? "0",
[`sumTraget${index + 1}`]: strategy.sumTraget ?? "0",
[`sumBudget${index + 1}`]: strategy.sumBudget ?? "0",
[`sumRowDev`]: strategy.sumRowDev ?? "0",
[`sumRowTarget`]: strategy.sumRowTarget ?? "0",
[`sumRowBudget`]: strategy.sumRowBudget ?? "0",
};
}),
};
return formattedGroup;
});
// const fmdata = reformattedData.map(rfmData => {
// return {
// rowNo: rfmData.rowNo,
// rootId: rfmData.rootId,
// root: rfmData.root,
// strategy: [
// {
// strategyName1: rfmData.strategy[0].strategyName1,
// devCount1: rfmData.strategy[0].devCount1,
// target1: rfmData.strategy[0].target1,
// receiveBudget1: rfmData.strategy[0].receiveBudget1
// },
// {
// strategyName2: rfmData.strategy[1].strategyName2,
// devCount2: rfmData.strategy[1].devCount2,
// target2: rfmData.strategy[1].target2,
// receiveBudget2: rfmData.strategy[1].receiveBudget2
// },
// {
// strategyName3: rfmData.strategy[2].strategyName3,
// devCount3: rfmData.strategy[2].devCount3,
// target3: rfmData.strategy[2].target3,
// receiveBudget3: rfmData.strategy[2].receiveBudget3
// },
// {
// strategyName4: rfmData.strategy[3].strategyName4,
// devCount4: rfmData.strategy[3].devCount4,
// target4: rfmData.strategy[3].target4,
// receiveBudget4: rfmData.strategy[3].receiveBudget4
// }
// ],
// };
// });
return new HttpSuccess({
template: "development",
reportName: "development",
data: {
data: formattedData,
data: mappedDataDev,
resultAllStrategy: reformattedData,
},
});
}