diff --git a/src/controllers/OrganizationDotnetController.ts b/src/controllers/OrganizationDotnetController.ts index 7d0608d2..7311a87d 100644 --- a/src/controllers/OrganizationDotnetController.ts +++ b/src/controllers/OrganizationDotnetController.ts @@ -4721,6 +4721,54 @@ export class OrganizationDotnetController extends Controller { if (!profile) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); + 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; + }); + + profile.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 mapProfile = profile.map((x) => { return { id: x.id, @@ -4728,6 +4776,16 @@ 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, }; }); return new HttpSuccess(mapProfile);