Report #1174 (3),(4)

This commit is contained in:
AdisakKanthawilang 2025-01-17 18:41:26 +07:00
parent 06063a0a86
commit dcc9ef5afd
2 changed files with 424 additions and 7 deletions

View file

@ -28,7 +28,7 @@ import { AssignDirector } from "../entities/AssignDirector";
import { EvaluateAchievement } from "../entities/EvaluateAchievement";
import { EvaluateCommander } from "../entities/EvaluateCommander";
import CallAPI from "../interfaces/call-api";
import { Double, In } from "typeorm";
import { Between, Double, In } from "typeorm";
import Extension from "../interfaces/extension";
import { Appoint } from "../entities/Appoint";
import { AppointDirector } from "../entities/AppointDirector";
@ -51,6 +51,7 @@ export class ReportController extends Controller {
private evaluateCommanderRepository = AppDataSource.getRepository(EvaluateCommander);
private appointRepository = AppDataSource.getRepository(Appoint);
private AppointDirectorRepository = AppDataSource.getRepository(AppointDirector);
private assignRepository = AppDataSource.getRepository(Assign);
private assignOutputRepository = AppDataSource.getRepository(AssignOutput);
/**
* API
@ -1397,11 +1398,192 @@ export class ReportController extends Controller {
@Query("startDate") startDate?: Date,
@Query("endDate") endDate?: Date,
) {
return new HttpSuccess({
template: "placementProbation01",
reportName: "xlsx-report",
data: "",
});
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"];
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 = {};
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")
@ -1427,10 +1609,191 @@ 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;
};
}
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 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 = {};
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",
data: "",
data: formattedData,
});
}
}

View file

@ -29,6 +29,36 @@ class Extension {
return "";
}
}
public static ToThaiShortMonth(value: number) {
switch (value) {
case 1:
return "ม.ค.";
case 2:
return "ก.พ.";
case 3:
return "มี.ค.";
case 4:
return "เม.ย.";
case 5:
return "พ.ค.";
case 6:
return "มิ.ย.";
case 7:
return "ก.ค.";
case 8:
return "ส.ค.";
case 9:
return "ก.ย.";
case 10:
return "ต.ค.";
case 11:
return "พ.ย.";
case 12:
return "ธ.ค.";
default:
return "";
}
}
public static ToThaiYear(value: number) {
if (value < 2400) return value + 543;
@ -67,6 +97,30 @@ class Extension {
);
}
public static ToThaiShortDate(value: Date) {
let yy = value.getFullYear() < 2400 ? value.getFullYear() + 543 : value.getFullYear();
return (
"วันที่ " +
value.getDate() +
" " +
Extension.ToThaiShortMonth(value.getMonth() + 1) +
" " +
yy.toString().slice(-2)
);
}
public static ToThaiNoprefixDate(value: Date) {
let yy = value.getFullYear() < 2400 ? value.getFullYear() + 543 : value.getFullYear();
return (
"วันที่ " +
value.getDate() +
" " +
Extension.ToThaiMonth(value.getMonth() + 1) +
" " +
yy.toString().slice(-2)
);
}
public static ToThaiFullDate2(value: Date) {
let yy = value.getFullYear() < 2400 ? value.getFullYear() + 543 : value.getFullYear();
return value.getDate() + " " + Extension.ToThaiMonth(value.getMonth() + 1) + " " + yy;