diff --git a/src/controllers/OrganizationUnauthorizeController.ts b/src/controllers/OrganizationUnauthorizeController.ts index 64d52b4c..28c88db6 100644 --- a/src/controllers/OrganizationUnauthorizeController.ts +++ b/src/controllers/OrganizationUnauthorizeController.ts @@ -21,6 +21,7 @@ import { viewProfileEmployeeEvaluation } from "../entities/view/viewProfileEmplo import Extension from "../interfaces/extension"; import { resetPassword } from "../keycloak"; import { viewEmployeePosMaster } from "../entities/view/viewEmployeePosMaster"; +import { EmployeePosDict } from "../entities/EmployeePosDict"; @Route("api/v1/org/unauthorize") @Tags("OrganizationUnauthorize") @Response( @@ -37,6 +38,7 @@ export class OrganizationUnauthorizeController extends Controller { private viewProfileEmployeeEvaluationRepo = AppDataSource.getRepository( viewProfileEmployeeEvaluation, ); + private employeePosDictRepository = AppDataSource.getRepository(EmployeePosDict); @Post("user/reset-password") async forgetPassword( @@ -1505,22 +1507,25 @@ export class OrganizationUnauthorizeController extends Controller { return new HttpSuccess(data); } - /** - * 3. API Get Profile จาก keycloak id - * - * @summary 3. API Get Profile จาก keycloak id - * - * @param {string} keycloakId Id keycloak - */ @Get("root/officer/{rootId}") async GetProfileByRootIdAsync(@Path() rootId: string) { const profiles = await this.profileRepo.find({ - relations: { - posLevel: true, - posType: true, - profileSalary: true, - profileInsignias: true, - }, + relations: [ + "posLevel", + "posType", + "profileSalary", + "profileInsignias", + "profileInsignias.insignia", + "profileDisciplines", + "profileAssessments", + "current_holders", + "current_holders.orgRevision", + "current_holders.orgRoot", + "current_holders.orgChild1", + "current_holders.orgChild2", + "current_holders.orgChild3", + "current_holders.orgChild4", + ], where: { current_holders: { orgRootId: rootId } }, order: { profileSalary: { @@ -1531,55 +1536,267 @@ export class OrganizationUnauthorizeController extends Controller { }, }, }); - // if (!profile) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล"); - const mapProfile = profiles.map((profile) => ({ - id: profile.id, - avatar: profile.avatar, - avatarName: profile.avatarName, - rank: profile.rank, - prefix: profile.prefix, - firstName: profile.firstName, - lastName: profile.lastName, - citizenId: profile.citizenId, - position: profile.position, - posLevelId: profile.posLevelId, - email: profile.email, - phone: profile.phone, - keycloak: profile.keycloak, - isProbation: profile.isProbation, - isLeave: profile.isLeave, - leaveReason: profile.leaveReason, - dateRetire: profile.dateRetire, - dateAppoint: profile.dateAppoint, - dateRetireLaw: profile.dateRetireLaw, - dateStart: profile.dateStart, - govAgeAbsent: profile.govAgeAbsent, - govAgePlus: profile.govAgePlus, - birthDate: profile.birthDate, - reasonSameDate: profile.reasonSameDate, - telephoneNumber: profile.phone, - nationality: profile.nationality, - gender: profile.gender, - relationship: profile.relationship, - religion: profile.religion, - bloodGroup: profile.bloodGroup, - registrationAddress: profile.registrationAddress, - registrationProvinceId: profile.registrationProvinceId, - registrationDistrictId: profile.registrationDistrictId, - registrationSubDistrictId: profile.registrationSubDistrictId, - registrationZipCode: profile.registrationZipCode, - currentAddress: profile.currentAddress, - currentProvinceId: profile.currentProvinceId, - currentSubDistrictId: profile.currentSubDistrictId, - currentZipCode: profile.currentZipCode, - dutyTimeId: profile.dutyTimeId, - dutyTimeEffectiveDate: profile.dutyTimeEffectiveDate, - posLevel: profile.posLevel ? profile.posLevel : null, - posType: profile.posType ? profile.posType : null, - profileSalary: profile.profileSalary, - profileInsignia: profile.profileInsignias, - })); + 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.orgRevisionRepository.findOne({ + where: { orgRevisionIsCurrent: true }, + }); + + const mapProfile = profiles.map((profile) => { + const shortName = + profile.current_holders.length == 0 + ? null + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4 != + null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4.orgChild4ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild3 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild3.orgChild3ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild2 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild2.orgChild2ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != + null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild1 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild1.orgChild1ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != + null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgRoot != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgRoot.orgRootShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : null; + + return { + id: profile.id, + avatar: profile.avatar, + avatarName: profile.avatarName, + rank: profile.rank ?? "", + prefix: profile.prefix ?? "", + firstName: profile.firstName ?? "", + lastName: profile.lastName ?? "", + citizenId: profile.citizenId ?? "", + position: profile.position ?? "", + posLevelId: profile.posLevelId, + posTypeId: profile.posTypeId, + email: profile.email, + phone: profile.phone, + keycloak: profile.keycloak, + isProbation: profile.isProbation, + isLeave: profile.isLeave, + leaveReason: profile.leaveReason, + dateRetire: profile.dateRetire, + dateAppoint: profile.dateAppoint, + dateRetireLaw: profile.dateRetireLaw, + dateStart: profile.dateStart, + govAgeAbsent: profile.govAgeAbsent, + govAgePlus: profile.govAgePlus, + birthDate: profile.birthDate ?? new Date(), + reasonSameDate: profile.reasonSameDate, + telephoneNumber: profile.phone, + nationality: profile.nationality, + gender: profile.gender ?? "", + relationship: profile.relationship ?? "", + religion: profile.religion ?? "", + bloodGroup: profile.bloodGroup ?? "", + registrationAddress: profile.registrationAddress, + registrationProvinceId: profile.registrationProvinceId, + registrationDistrictId: profile.registrationDistrictId, + registrationSubDistrictId: profile.registrationSubDistrictId, + registrationZipCode: profile.registrationZipCode, + currentAddress: profile.currentAddress, + currentProvinceId: profile.currentProvinceId, + currentSubDistrictId: profile.currentSubDistrictId, + currentZipCode: profile.currentZipCode, + dutyTimeId: profile.dutyTimeId, + dutyTimeEffectiveDate: profile.dutyTimeEffectiveDate, + posLevel: profile.posLevel?.posLevelName ?? "", + posType: profile.posType?.posTypeName ?? "", + profileSalary: profile.profileSalary, + profileInsignia: profile.profileInsignias.map((x) => { + return { ...x, insignia: x.insignia.name }; + }), + amount: profile.amount, + positionSalaryAmount: profile.positionSalaryAmount, + mouthSalaryAmount: profile.mouthSalaryAmount, + profileType: "OFFICER", + root: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRoot?.orgRootName ?? null, + rootId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRootId ?? null, + rootDnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRoot?.ancestorDNA ?? null, + child1: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1?.orgChild1Name ?? null, + child1Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1Id ?? null, + child1DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1?.ancestorDNA ?? null, + child2: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2?.orgChild2Name ?? null, + child2Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2Id ?? null, + child2DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2?.ancestorDNA ?? null, + child3: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3?.orgChild3Name ?? null, + child3Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3Id ?? null, + child3DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3?.ancestorDNA ?? null, + child4: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4?.orgChild4Name ?? null, + child4Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4Id ?? null, + child4DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4?.ancestorDNA ?? null, + posNo: shortName ?? "", + markDiscipline: profile.profileDisciplines.length > 0 ? true : false, + 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, + }; + }); return new HttpSuccess(mapProfile); } @@ -1663,6 +1880,315 @@ export class OrganizationUnauthorizeController extends Controller { return new HttpSuccess(mapProfile); } + @Post("find/employee/position") + async GetProfileByPositionEmpAsync( + @Body() + body: { + empPosId: string[]; + rootId: string; + }, + ) { + const findRevision = await this.orgRevisionRepository.findOne({ + where: { orgRevisionIsCurrent: true }, + }); + const employeePosDict = await this.employeePosDictRepository.find({ + where: { id: In(body.empPosId) }, + }); + + const profiles = await this.profileEmpRepo.find({ + relations: [ + "posLevel", + "posType", + "profileSalary", + "profileInsignias", + "profileInsignias.insignia", + "profileDisciplines", + "profileAssessments", + "current_holders", + "current_holders.orgRevision", + "current_holders.orgRoot", + "current_holders.orgChild1", + "current_holders.orgChild2", + "current_holders.orgChild3", + "current_holders.orgChild4", + ], + where: employeePosDict.map((entry) => ({ + posLevelId: entry.posLevelId, + posTypeId: entry.posTypeId, + position: entry.posDictName, + current_holders: { orgRootId: body.rootId }, + })), + order: { + profileSalary: { + commandDateAffect: "DESC", + }, + profileInsignias: { + receiveDate: "DESC", + }, + }, + }); + + 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 + ? null + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4 != + null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4.orgChild4ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild3 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild3.orgChild3ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild2 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild2.orgChild2ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != + null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgChild1 != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild1.orgChild1ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != + null && + profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) + ?.orgRoot != null + ? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgRoot.orgRootShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}` + : null; + return { + id: profile.id, + avatar: profile.avatar, + avatarName: profile.avatarName, + rank: profile.rank ?? "", + prefix: profile.prefix ?? "", + firstName: profile.firstName ?? "", + lastName: profile.lastName ?? "", + citizenId: profile.citizenId ?? "", + position: profile.position ?? "", + posLevelId: profile.posLevelId, + email: profile.email, + phone: profile.phone, + keycloak: profile.keycloak, + isProbation: profile.isProbation, + isLeave: profile.isLeave, + leaveReason: profile.leaveReason, + dateRetire: profile.dateRetire, + dateAppoint: profile.dateAppoint, + dateRetireLaw: profile.dateRetireLaw, + dateStart: profile.dateStart, + govAgeAbsent: profile.govAgeAbsent, + govAgePlus: profile.govAgePlus, + birthDate: profile.birthDate ?? new Date(), + reasonSameDate: profile.reasonSameDate, + telephoneNumber: profile.phone, + nationality: profile.nationality, + gender: profile.gender ?? "", + relationship: profile.relationship ?? "", + religion: profile.religion ?? "", + bloodGroup: profile.bloodGroup ?? "", + registrationAddress: profile.registrationAddress, + registrationProvinceId: profile.registrationProvinceId, + registrationDistrictId: profile.registrationDistrictId, + registrationSubDistrictId: profile.registrationSubDistrictId, + registrationZipCode: profile.registrationZipCode, + currentAddress: profile.currentAddress, + currentProvinceId: profile.currentProvinceId, + currentSubDistrictId: profile.currentSubDistrictId, + currentZipCode: profile.currentZipCode, + posLevel: + (profile.posType == null || profile.posType?.posTypeShortName == null + ? "" + : profile.posType?.posTypeShortName + " ") + (profile.posLevel?.posLevelName ?? ""), + posType: profile.posType?.posTypeName ?? "", + profileSalary: profile.profileSalary.map((x) => { + return { ...x, date: x.commandDateAffect ?? new Date() }; + }), + profileInsignia: profile.profileInsignias.map((x) => { + return { ...x, insignia: x.insignia.name }; + }), + amount: profile.amount, + positionSalaryAmount: profile.positionSalaryAmount, + mouthSalaryAmount: profile.mouthSalaryAmount, + profileType: "EMPLOYEE", + root: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRoot?.orgRootName ?? null, + rootId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRootId ?? null, + rootDnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgRoot?.ancestorDNA ?? null, + child1: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1?.orgChild1Name ?? null, + child1Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1Id ?? null, + child1DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild1?.ancestorDNA ?? null, + child2: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2?.orgChild2Name ?? null, + child2Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2Id ?? null, + child2DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild2?.ancestorDNA ?? null, + child3: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3?.orgChild3Name ?? null, + child3Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3Id ?? null, + child3DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild3?.ancestorDNA ?? null, + child4: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4?.orgChild4Name ?? null, + child4Id: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4Id ?? null, + child4DnaId: + profile?.current_holders?.find( + (x) => + x.orgRevision?.orgRevisionIsDraft == false && + x.orgRevision?.orgRevisionIsCurrent == true, + )?.orgChild4?.ancestorDNA ?? null, + posNo: shortName ?? "", + markDiscipline: profile.profileDisciplines.length > 0 ? true : false, + 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, + }; + }); + + return new HttpSuccess(mapProfile); + } + /** * API ยืนยัน Email *