From ebeda9aeb64d1cc90009899a2c5eaa4181310af0 Mon Sep 17 00:00:00 2001 From: AdisakKanthawilang Date: Thu, 15 May 2025 17:47:24 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=9C=E0=B8=A5=E0=B8=9B=E0=B8=A3=E0=B8=B0?= =?UTF-8?q?=E0=B9=80=E0=B8=A1=E0=B8=B4=E0=B8=99=205=20=E0=B8=9B=E0=B8=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrganizationDotnetController.ts | 176 +++++++++++++++++- 1 file changed, 175 insertions(+), 1 deletion(-) diff --git a/src/controllers/OrganizationDotnetController.ts b/src/controllers/OrganizationDotnetController.ts index 7cd02310..66063664 100644 --- a/src/controllers/OrganizationDotnetController.ts +++ b/src/controllers/OrganizationDotnetController.ts @@ -2391,6 +2391,54 @@ 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 findRevision = await this.orgRevisionRepo.findOne({ where: { orgRevisionIsCurrent: true }, }); @@ -2571,6 +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, }; }); @@ -2616,6 +2674,54 @@ export class OrganizationDotnetController extends Controller { where: { orgRevisionIsCurrent: true }, }); + // 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 mapProfile = profiles.map((profile) => { const shortName = profile.current_holders.length == 0 @@ -2710,7 +2816,17 @@ 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, + // 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, }; }); @@ -2773,6 +2889,54 @@ 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 mapProfile = profiles.map((profile) => { const shortName = profile.current_holders.length == 0 @@ -2952,6 +3116,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, }; });