This commit is contained in:
mamoss 2025-05-26 10:10:28 +07:00
parent 61277e9898
commit 71aac0dd52
3 changed files with 193 additions and 138 deletions

View file

@ -2391,53 +2391,53 @@ export class OrganizationDotnetController extends Controller {
},
});
const currentYear = new Date().getFullYear();
const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
// APR Averages
const aprAverages: { [year: number]: number | null } = {};
const aprSums: { [year: number]: number } = {};
const aprCounts: { [year: number]: number } = {};
// OCT Averages
const octAverages: { [year: number]: number | null } = {};
const octSums: { [year: number]: number } = {};
const octCounts: { [year: number]: number } = {};
years.forEach(year => {
aprAverages[year] = null;
aprSums[year] = 0;
aprCounts[year] = 0;
octAverages[year] = null;
octSums[year] = 0;
octCounts[year] = 0;
});
profiles.forEach(profile => {
const assessments = profile.profileAssessments || [];
assessments.forEach(assessment => {
const year = Number(assessment.year);
if (years.includes(year)) {
if (assessment.period === 'APR') {
aprSums[year] += assessment.pointSum;
aprCounts[year] += 1;
}
if (assessment.period === 'OCT') {
octSums[year] += assessment.pointSum;
octCounts[year] += 1;
}
}
});
});
years.forEach(year => {
aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
});
// const currentYear = new Date().getFullYear();
// const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
// // APR Averages
// const aprAverages: { [year: number]: number | null } = {};
// const aprSums: { [year: number]: number } = {};
// const aprCounts: { [year: number]: number } = {};
// // OCT Averages
// const octAverages: { [year: number]: number | null } = {};
// const octSums: { [year: number]: number } = {};
// const octCounts: { [year: number]: number } = {};
// years.forEach((year) => {
// aprAverages[year] = null;
// aprSums[year] = 0;
// aprCounts[year] = 0;
// octAverages[year] = null;
// octSums[year] = 0;
// octCounts[year] = 0;
// });
// profiles.forEach((profile) => {
// const assessments = profile.profileAssessments || [];
// assessments.forEach((assessment) => {
// const year = Number(assessment.year);
// if (years.includes(year)) {
// if (assessment.period === "APR") {
// aprSums[year] += assessment.pointSum;
// aprCounts[year] += 1;
// }
// if (assessment.period === "OCT") {
// octSums[year] += assessment.pointSum;
// octCounts[year] += 1;
// }
// }
// });
// });
// years.forEach((year) => {
// aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
// octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
// });
const findRevision = await this.orgRevisionRepo.findOne({
where: { orgRevisionIsCurrent: true },
@ -2619,16 +2619,16 @@ export class OrganizationDotnetController extends Controller {
markLeave: false,
markRate: profile.profileAssessments.length > 0 ? true : false,
markInsignia: profile.profileInsignias.length > 0 ? true : false,
apr1:aprAverages[currentYear] ? Extension.textPoint(aprAverages[currentYear] as number) : null,
apr2:aprAverages[currentYear - 1] ? Extension.textPoint(aprAverages[currentYear - 1] as number) : null,
apr3:aprAverages[currentYear - 2] ? Extension.textPoint(aprAverages[currentYear - 2] as number) : null,
apr4:aprAverages[currentYear - 3] ? Extension.textPoint(aprAverages[currentYear - 3] as number) : null,
apr5:aprAverages[currentYear - 4] ? Extension.textPoint(aprAverages[currentYear - 4] as number) : null,
oct1:octAverages[currentYear] ? Extension.textPoint(octAverages[currentYear] as number) : null,
oct2:octAverages[currentYear - 1] ? Extension.textPoint(octAverages[currentYear - 1] as number) : null,
oct3:octAverages[currentYear - 2] ? Extension.textPoint(octAverages[currentYear - 2] as number) : null,
oct4:octAverages[currentYear - 3] ? Extension.textPoint(octAverages[currentYear - 3] as number) : null,
oct5:octAverages[currentYear - 4] ? Extension.textPoint(octAverages[currentYear - 4] as number) : null,
// apr1:aprAverages[currentYear] ? Extension.textPoint(aprAverages[currentYear] as number) : null,
// apr2:aprAverages[currentYear - 1] ? Extension.textPoint(aprAverages[currentYear - 1] as number) : null,
// apr3:aprAverages[currentYear - 2] ? Extension.textPoint(aprAverages[currentYear - 2] as number) : null,
// apr4:aprAverages[currentYear - 3] ? Extension.textPoint(aprAverages[currentYear - 3] as number) : null,
// apr5:aprAverages[currentYear - 4] ? Extension.textPoint(aprAverages[currentYear - 4] as number) : null,
// oct1:octAverages[currentYear] ? Extension.textPoint(octAverages[currentYear] as number) : null,
// oct2:octAverages[currentYear - 1] ? Extension.textPoint(octAverages[currentYear - 1] as number) : null,
// oct3:octAverages[currentYear - 2] ? Extension.textPoint(octAverages[currentYear - 2] as number) : null,
// oct4:octAverages[currentYear - 3] ? Extension.textPoint(octAverages[currentYear - 3] as number) : null,
// oct5:octAverages[currentYear - 4] ? Extension.textPoint(octAverages[currentYear - 4] as number) : null,
};
});
@ -2674,41 +2674,41 @@ export class OrganizationDotnetController extends Controller {
where: { orgRevisionIsCurrent: true },
});
// const currentYear = new Date().getFullYear();
// const currentYear = new Date().getFullYear();
// const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
// // APR Averages
// const aprAverages: { [year: number]: number | null } = {};
// const aprSums: { [year: number]: number } = {};
// const aprCounts: { [year: number]: number } = {};
// // OCT Averages
// const octAverages: { [year: number]: number | null } = {};
// const octSums: { [year: number]: number } = {};
// const octCounts: { [year: number]: number } = {};
// years.forEach(year => {
// aprAverages[year] = null;
// aprSums[year] = 0;
// aprCounts[year] = 0;
// octAverages[year] = null;
// octSums[year] = 0;
// octCounts[year] = 0;
// });
// profiles.forEach(profile => {
// const assessments = profile.profileAssessments || [];
// assessments.forEach(assessment => {
// const year = Number(assessment.year);
// if (years.includes(year)) {
// if (assessment.period === 'APR') {
// aprSums[year] += assessment.pointSum;
// aprCounts[year] += 1;
// }
// if (assessment.period === 'OCT') {
// octSums[year] += assessment.pointSum;
// octCounts[year] += 1;
@ -2716,7 +2716,7 @@ export class OrganizationDotnetController extends Controller {
// }
// });
// });
// years.forEach(year => {
// aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
// octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
@ -2816,7 +2816,7 @@ export class OrganizationDotnetController extends Controller {
x.orgRevision?.orgRevisionIsDraft == false &&
x.orgRevision?.orgRevisionIsCurrent == true,
)?.orgRootId ?? null,
posNo: shortName ?? "",
posNo: shortName ?? "",
// apr1:aprAverages[currentYear] ? Extension.textPoint(aprAverages[currentYear] as number) : null,
// apr2:aprAverages[currentYear - 1] ? Extension.textPoint(aprAverages[currentYear - 1] as number) : null,
// apr3:aprAverages[currentYear - 2] ? Extension.textPoint(aprAverages[currentYear - 2] as number) : null,
@ -2889,50 +2889,50 @@ export class OrganizationDotnetController extends Controller {
},
});
const currentYear = new Date().getFullYear();
const currentYear = new Date().getFullYear();
const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
// APR Averages
const aprAverages: { [year: number]: number | null } = {};
const aprSums: { [year: number]: number } = {};
const aprCounts: { [year: number]: number } = {};
// OCT Averages
const octAverages: { [year: number]: number | null } = {};
const octSums: { [year: number]: number } = {};
const octCounts: { [year: number]: number } = {};
years.forEach(year => {
years.forEach((year) => {
aprAverages[year] = null;
aprSums[year] = 0;
aprCounts[year] = 0;
octAverages[year] = null;
octSums[year] = 0;
octCounts[year] = 0;
});
profiles.forEach(profile => {
profiles.forEach((profile) => {
const assessments = profile.profileAssessments || [];
assessments.forEach(assessment => {
assessments.forEach((assessment) => {
const year = Number(assessment.year);
if (years.includes(year)) {
if (assessment.period === 'APR') {
if (assessment.period === "APR") {
aprSums[year] += assessment.pointSum;
aprCounts[year] += 1;
}
if (assessment.period === 'OCT') {
if (assessment.period === "OCT") {
octSums[year] += assessment.pointSum;
octCounts[year] += 1;
}
}
});
});
years.forEach(year => {
years.forEach((year) => {
aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
});
@ -3116,16 +3116,36 @@ export class OrganizationDotnetController extends Controller {
markLeave: false,
markRate: profile.profileAssessments.length > 0 ? true : false,
markInsignia: profile.profileInsignias.length > 0 ? true : false,
apr1:aprAverages[currentYear] ? Extension.textPoint(aprAverages[currentYear] as number) : null,
apr2:aprAverages[currentYear - 1] ? Extension.textPoint(aprAverages[currentYear - 1] as number) : null,
apr3:aprAverages[currentYear - 2] ? Extension.textPoint(aprAverages[currentYear - 2] as number) : null,
apr4:aprAverages[currentYear - 3] ? Extension.textPoint(aprAverages[currentYear - 3] as number) : null,
apr5:aprAverages[currentYear - 4] ? Extension.textPoint(aprAverages[currentYear - 4] as number) : null,
oct1:octAverages[currentYear] ? Extension.textPoint(octAverages[currentYear] as number) : null,
oct2:octAverages[currentYear - 1] ? Extension.textPoint(octAverages[currentYear - 1] as number) : null,
oct3:octAverages[currentYear - 2] ? Extension.textPoint(octAverages[currentYear - 2] as number) : null,
oct4:octAverages[currentYear - 3] ? Extension.textPoint(octAverages[currentYear - 3] as number) : null,
oct5:octAverages[currentYear - 4] ? Extension.textPoint(octAverages[currentYear - 4] as number) : null,
apr1: aprAverages[currentYear]
? Extension.textPoint(aprAverages[currentYear] as number)
: null,
apr2: aprAverages[currentYear - 1]
? Extension.textPoint(aprAverages[currentYear - 1] as number)
: null,
apr3: aprAverages[currentYear - 2]
? Extension.textPoint(aprAverages[currentYear - 2] as number)
: null,
apr4: aprAverages[currentYear - 3]
? Extension.textPoint(aprAverages[currentYear - 3] as number)
: null,
apr5: aprAverages[currentYear - 4]
? Extension.textPoint(aprAverages[currentYear - 4] as number)
: null,
oct1: octAverages[currentYear]
? Extension.textPoint(octAverages[currentYear] as number)
: null,
oct2: octAverages[currentYear - 1]
? Extension.textPoint(octAverages[currentYear - 1] as number)
: null,
oct3: octAverages[currentYear - 2]
? Extension.textPoint(octAverages[currentYear - 2] as number)
: null,
oct4: octAverages[currentYear - 3]
? Extension.textPoint(octAverages[currentYear - 3] as number)
: null,
oct5: octAverages[currentYear - 4]
? Extension.textPoint(octAverages[currentYear - 4] as number)
: null,
};
});
@ -4702,69 +4722,68 @@ export class OrganizationDotnetController extends Controller {
"profileSalary",
"profileInsignias",
"profileDisciplines",
"profileAssessments"
"profileAssessments",
],
where: { id: In(body.profileIds) }
where: { id: In(body.profileIds) },
});
}
else {
} else {
profile = await this.profileEmpRepo.find({
relations: [
"profileSalary",
"profileInsignias",
"profileDisciplines",
"profileAssessments"
"profileAssessments",
],
where: { id: In(body.profileIds) }
where: { id: In(body.profileIds) },
});
}
if (!profile) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
const currentYear = new Date().getFullYear();
const currentYear = new Date().getFullYear();
const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
// APR Averages
const aprAverages: { [year: number]: number | null } = {};
const aprSums: { [year: number]: number } = {};
const aprCounts: { [year: number]: number } = {};
// OCT Averages
const octAverages: { [year: number]: number | null } = {};
const octSums: { [year: number]: number } = {};
const octCounts: { [year: number]: number } = {};
years.forEach(year => {
years.forEach((year) => {
aprAverages[year] = null;
aprSums[year] = 0;
aprCounts[year] = 0;
octAverages[year] = null;
octSums[year] = 0;
octCounts[year] = 0;
});
profile.forEach(profile => {
profile.forEach((profile) => {
const assessments = profile.profileAssessments || [];
assessments.forEach(assessment => {
assessments.forEach((assessment) => {
const year = Number(assessment.year);
if (years.includes(year)) {
if (assessment.period === 'APR') {
if (assessment.period === "APR") {
aprSums[year] += assessment.pointSum;
aprCounts[year] += 1;
}
if (assessment.period === 'OCT') {
if (assessment.period === "OCT") {
octSums[year] += assessment.pointSum;
octCounts[year] += 1;
}
}
});
});
years.forEach(year => {
years.forEach((year) => {
aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
});
@ -4776,16 +4795,36 @@ export class OrganizationDotnetController extends Controller {
markLeave: false,
markRate: x.profileAssessments.length > 0 ? true : false,
markInsignia: x.profileInsignias.length > 0 ? true : false,
apr1:aprAverages[currentYear] ? Extension.textPoint(aprAverages[currentYear] as number) : null,
apr2:aprAverages[currentYear - 1] ? Extension.textPoint(aprAverages[currentYear - 1] as number) : null,
apr3:aprAverages[currentYear - 2] ? Extension.textPoint(aprAverages[currentYear - 2] as number) : null,
apr4:aprAverages[currentYear - 3] ? Extension.textPoint(aprAverages[currentYear - 3] as number) : null,
apr5:aprAverages[currentYear - 4] ? Extension.textPoint(aprAverages[currentYear - 4] as number) : null,
oct1:octAverages[currentYear] ? Extension.textPoint(octAverages[currentYear] as number) : null,
oct2:octAverages[currentYear - 1] ? Extension.textPoint(octAverages[currentYear - 1] as number) : null,
oct3:octAverages[currentYear - 2] ? Extension.textPoint(octAverages[currentYear - 2] as number) : null,
oct4:octAverages[currentYear - 3] ? Extension.textPoint(octAverages[currentYear - 3] as number) : null,
oct5:octAverages[currentYear - 4] ? Extension.textPoint(octAverages[currentYear - 4] as number) : null,
apr1: aprAverages[currentYear]
? Extension.textPoint(aprAverages[currentYear] as number)
: null,
apr2: aprAverages[currentYear - 1]
? Extension.textPoint(aprAverages[currentYear - 1] as number)
: null,
apr3: aprAverages[currentYear - 2]
? Extension.textPoint(aprAverages[currentYear - 2] as number)
: null,
apr4: aprAverages[currentYear - 3]
? Extension.textPoint(aprAverages[currentYear - 3] as number)
: null,
apr5: aprAverages[currentYear - 4]
? Extension.textPoint(aprAverages[currentYear - 4] as number)
: null,
oct1: octAverages[currentYear]
? Extension.textPoint(octAverages[currentYear] as number)
: null,
oct2: octAverages[currentYear - 1]
? Extension.textPoint(octAverages[currentYear - 1] as number)
: null,
oct3: octAverages[currentYear - 2]
? Extension.textPoint(octAverages[currentYear - 2] as number)
: null,
oct4: octAverages[currentYear - 3]
? Extension.textPoint(octAverages[currentYear - 3] as number)
: null,
oct5: octAverages[currentYear - 4]
? Extension.textPoint(octAverages[currentYear - 4] as number)
: null,
};
});
return new HttpSuccess(mapProfile);

View file

@ -150,6 +150,8 @@ export class ReportController extends Controller {
tenureTypeCondition = "registryOfficer.Years BETWEEN :tenureMin AND :tenureMax";
} else if (tenureType != "" && tenureType == "level") {
tenureTypeCondition = "registryOfficer.levelYears BETWEEN :tenureMin AND :tenureMax";
} else if (tenureType != "" && tenureType == "posExecutive") {
tenureTypeCondition = "registryOfficer.levelYears BETWEEN :tenureMin AND :tenureMax";
}
const [lists, total] = await AppDataSource.getRepository(viewRegistryOfficer)
@ -379,9 +381,14 @@ export class ReportController extends Controller {
Days: x.Days ? x.Days : 0,
},
levelDate: {
posExecutiveYears: x.levelYears ? x.levelYears : 0,
posExecutiveMonths: x.levelMonths ? x.levelMonths : 0,
posExecutiveDays: x.levelDays ? x.levelDays : 0,
Years: x.levelYears ? x.levelYears : 0,
Months: x.levelMonths ? x.levelMonths : 0,
Days: x.levelDays ? x.levelDays : 0,
},
posExecutiveDate: {
Years: x.posExecutiveYears ? x.posExecutiveYears : 0,
Months: x.posExecutiveMonths ? x.posExecutiveMonths : 0,
Days: x.posExecutiveDays ? x.posExecutiveDays : 0,
},
});
}
@ -5603,14 +5610,14 @@ export class ReportController extends Controller {
}
}
}
return new HttpSuccess({
template: "report2",
reportName: "report2",
data: {
rootName: orgRootData.length > 0 ? orgRootData[0].orgRootName : "-",
data: data
}
return new HttpSuccess({
template: "report2",
reportName: "report2",
data: {
rootName: orgRootData.length > 0 ? orgRootData[0].orgRootName : "-",
data: data,
},
});
}
/**

View file

@ -302,6 +302,15 @@ export class viewRegistryOfficer {
@ViewColumn()
levelDays: number;
@ViewColumn()
posExecutiveYears: number;
@ViewColumn()
posExecutiveMonths: number;
@ViewColumn()
posExecutiveDays: number;
@ViewColumn()
positionArea: string;