11288 lines
492 KiB
TypeScript
11288 lines
492 KiB
TypeScript
import {
|
|
Controller,
|
|
Get,
|
|
Route,
|
|
Security,
|
|
Tags,
|
|
SuccessResponse,
|
|
Response,
|
|
Path,
|
|
Query,
|
|
Post,
|
|
Body,
|
|
} from "tsoa";
|
|
import { AppDataSource } from "../database/data-source";
|
|
import HttpSuccess from "../interfaces/http-success";
|
|
import HttpStatusCode from "../interfaces/http-status";
|
|
import HttpError from "../interfaces/http-error";
|
|
import { In, LessThan, Brackets } from "typeorm";
|
|
import { OrgRevision } from "../entities/OrgRevision";
|
|
import { OrgRoot } from "../entities/OrgRoot";
|
|
import { OrgChild1 } from "../entities/OrgChild1";
|
|
import { OrgChild2 } from "../entities/OrgChild2";
|
|
import { OrgChild3 } from "../entities/OrgChild3";
|
|
import { OrgChild4 } from "../entities/OrgChild4";
|
|
import { PosType } from "../entities/PosType";
|
|
import { PosLevel } from "../entities/PosLevel";
|
|
import { PosMaster } from "../entities/PosMaster";
|
|
import { EmployeePosMaster } from "../entities/EmployeePosMaster";
|
|
import Extension from "../interfaces/extension";
|
|
import { LeaveType } from "../entities/LeaveType";
|
|
import HttpStatus from "../interfaces/http-status";
|
|
import { Profile } from "../entities/Profile";
|
|
import { Position } from "../entities/Position";
|
|
import { ProfileEducation } from "../entities/ProfileEducation";
|
|
import { ProfileSalary } from "../entities/ProfileSalary";
|
|
import { viewRegistryOfficer } from "../entities/view/viewRegistryOfficer";
|
|
import { viewRegistryEmployee } from "../entities/view/viewRegistryEmployee";
|
|
import { EmployeeTempPosMaster } from "../entities/EmployeeTempPosMaster";
|
|
// import { sendWebSocket } from "../services/webSocket";
|
|
import { Registry } from "../entities/Registry";
|
|
import { RegistryEmployee } from "../entities/RegistryEmployee";
|
|
@Route("api/v1/org/report")
|
|
@Tags("Report")
|
|
@Security("bearerAuth")
|
|
@Response(
|
|
HttpStatusCode.INTERNAL_SERVER_ERROR,
|
|
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
|
|
)
|
|
export class ReportController extends Controller {
|
|
private orgRevisionRepository = AppDataSource.getRepository(OrgRevision);
|
|
private orgRootRepository = AppDataSource.getRepository(OrgRoot);
|
|
private child1Repository = AppDataSource.getRepository(OrgChild1);
|
|
private child2Repository = AppDataSource.getRepository(OrgChild2);
|
|
private child3Repository = AppDataSource.getRepository(OrgChild3);
|
|
private child4Repository = AppDataSource.getRepository(OrgChild4);
|
|
private posTypepository = AppDataSource.getRepository(PosType);
|
|
private posLevelRepository = AppDataSource.getRepository(PosLevel);
|
|
private posMasterRepository = AppDataSource.getRepository(PosMaster);
|
|
private profileRepository = AppDataSource.getRepository(Profile);
|
|
private empPosMasterRepository = AppDataSource.getRepository(EmployeePosMaster);
|
|
private empTempPosMasterRepository = AppDataSource.getRepository(EmployeeTempPosMaster);
|
|
private positionRepository = AppDataSource.getRepository(Position);
|
|
private profileEducationRepository = AppDataSource.getRepository(ProfileEducation);
|
|
private profileSalaryRepository = AppDataSource.getRepository(ProfileSalary);
|
|
|
|
/**
|
|
* API รายงานสถิติข้อมูลข้าราชการ กทม. สามัญ
|
|
*
|
|
* @summary รายงานสถิติข้อมูลข้าราชการ กทม. สามัญ
|
|
*
|
|
*/
|
|
@Get("registry-officer")
|
|
async registryOfficer(
|
|
@Query() node?: number,
|
|
@Query() nodeId?: string,
|
|
@Query() posType?: string,
|
|
@Query() posLevel?: string,
|
|
@Query() position?: string,
|
|
@Query() positionExecutive?: string,
|
|
@Query() gender?: string,
|
|
@Query() status?: string,
|
|
@Query() education?: string,
|
|
@Query() dateStart?: Date,
|
|
@Query() dateEnd?: Date,
|
|
@Query() ageMin?: number,
|
|
@Query() ageMax?: number,
|
|
@Query() isProbation?: boolean,
|
|
@Query() isRetire?: boolean,
|
|
@Query() isRetireLaw?: boolean,
|
|
@Query() retireType?: string,
|
|
@Query() tenureType?: string,
|
|
@Query() tenureMin?: number,
|
|
@Query() tenureMax?: number,
|
|
@Query() positionArea?: string,
|
|
@Query() educationLevel?: string,
|
|
@Query() field?: string,
|
|
@Query() sortBy: string = "posMasterNo",
|
|
@Query() sort: "ASC" | "DESC" = "ASC",
|
|
) {
|
|
const _null: any = null;
|
|
if (!dateStart) {
|
|
dateStart = _null;
|
|
}
|
|
if (!dateEnd) {
|
|
dateEnd = _null;
|
|
}
|
|
if (ageMin && (ageMin < 18 || ageMin > 60)) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60");
|
|
}
|
|
if (ageMax && (ageMax < 18 || ageMax > 60)) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMax must be between 18 and 60");
|
|
}
|
|
if (ageMin && ageMax && ageMin > ageMax) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin cannot be greater than ageMax");
|
|
}
|
|
ageMin = ageMin ?? 18;
|
|
ageMax = ageMax ?? 60;
|
|
|
|
tenureMin = tenureMin ?? 0;
|
|
tenureMax = tenureMax ?? 20;
|
|
|
|
let nodeCondition = "1=1";
|
|
if (node === 0 && nodeId) {
|
|
nodeCondition = "registryOfficer.orgRootId = :nodeId";
|
|
} else if (node === 1 && nodeId) {
|
|
nodeCondition = "registryOfficer.orgChild1Id = :nodeId";
|
|
} else if (node === 2 && nodeId) {
|
|
nodeCondition = "registryOfficer.orgChild2Id = :nodeId";
|
|
} else if (node === 3 && nodeId) {
|
|
nodeCondition = "registryOfficer.orgChild3Id = :nodeId";
|
|
} else if (node === 4 && nodeId) {
|
|
nodeCondition = "registryOfficer.orgChild4Id = :nodeId";
|
|
}
|
|
let dateAppointCondition = "1=1";
|
|
if (dateStart && dateEnd) {
|
|
dateAppointCondition =
|
|
"DATE(registryOfficer.dateAppoint) >= :startDateAppoint AND DATE(registryOfficer.dateAppoint) <= :endDateAppoint";
|
|
} else if (dateStart) {
|
|
dateAppointCondition = "DATE(registryOfficer.dateAppoint) >= :startDateAppoint";
|
|
} else if (dateEnd) {
|
|
dateAppointCondition = "DATE(registryOfficer.dateAppoint) <= :endDateAppoint";
|
|
}
|
|
|
|
const IsLeavecondition = ["registryOfficer.isLeave = :isLeave"];
|
|
const parameters: any = { isLeave: isRetire };
|
|
if (retireType && retireType.trim() !== "") {
|
|
IsLeavecondition.push("registryOfficer.leaveType = :retireType");
|
|
parameters.retireType = retireType;
|
|
}
|
|
|
|
let retireLawCondition = "1=1";
|
|
if (isRetireLaw) {
|
|
retireLawCondition =
|
|
"DATE(registryOfficer.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryOfficer.dateRetireLaw) <= :endDateRetireLaw";
|
|
}
|
|
|
|
let tenureTypeCondition = "1=1";
|
|
if (tenureType != "" && tenureType == "position") {
|
|
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.posExecutiveYears BETWEEN :tenureMin AND :tenureMax";
|
|
}
|
|
// ดึงผ่าน Table แทน View
|
|
// const [lists, total] = await AppDataSource.getRepository(viewRegistryOfficer)
|
|
const [lists, total] = await AppDataSource.getRepository(Registry)
|
|
.createQueryBuilder("registryOfficer")
|
|
.where(nodeCondition, {
|
|
nodeId: nodeId,
|
|
})
|
|
.andWhere(tenureTypeCondition, {
|
|
tenureMin: tenureMin,
|
|
tenureMax: tenureMax,
|
|
})
|
|
.andWhere("registryOfficer.age BETWEEN :ageMin AND :ageMax", {
|
|
ageMin,
|
|
ageMax,
|
|
})
|
|
.andWhere(dateAppointCondition, {
|
|
startDateAppoint: dateStart?.toISOString().split("T")[0],
|
|
endDateAppoint: dateEnd?.toISOString().split("T")[0],
|
|
})
|
|
.andWhere(retireLawCondition, {
|
|
startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)
|
|
?.toISOString()
|
|
.split("T")[0],
|
|
endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999)
|
|
.toISOString()
|
|
.split("T")[0],
|
|
})
|
|
.andWhere("registryOfficer.isProbation = :isProbation", {
|
|
isProbation: isProbation,
|
|
})
|
|
.andWhere(IsLeavecondition.join(" AND "), parameters)
|
|
.andWhere(
|
|
posType != null && posType != "" ? "registryOfficer.posTypeName = :posTypeName" : "1=1",
|
|
{
|
|
posTypeName: `${posType}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
posLevel != null && posLevel != "" ? "registryOfficer.posLevelName = :posLevelName" : "1=1",
|
|
{
|
|
posLevelName: `${posLevel}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
position != null && position != "" ? "registryOfficer.position = :position" : "1=1",
|
|
{
|
|
position: `${position}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
positionExecutive != null && positionExecutive != ""
|
|
? "registryOfficer.posExecutiveName = :posExecutiveName"
|
|
: "1=1",
|
|
{
|
|
posExecutiveName: `${positionExecutive}`,
|
|
},
|
|
)
|
|
.andWhere(gender != null && gender != "" ? "registryOfficer.gender = :gender" : "1=1", {
|
|
gender: `${gender}`,
|
|
})
|
|
.andWhere(
|
|
status != null && status != "" ? "registryOfficer.relationship = :relationship" : "1=1",
|
|
{
|
|
relationship: `${status}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
positionArea != null && positionArea != ""
|
|
? "registryOfficer.positionArea LIKE :positionArea"
|
|
: "1=1",
|
|
{
|
|
positionArea: `%${positionArea}%`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
education != null && education != "" ? "registryOfficer.degrees LIKE :degrees" : "1=1",
|
|
{
|
|
degrees: `%${education}%`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
educationLevel != null && educationLevel != ""
|
|
? "registryOfficer.educationLevels LIKE :educationLevels"
|
|
: "1=1",
|
|
{
|
|
educationLevels: `%${educationLevel}%`,
|
|
},
|
|
)
|
|
.andWhere(field != null && field != "" ? "registryOfficer.fields LIKE :fields" : "1=1", {
|
|
fields: `%${field}%`,
|
|
})
|
|
.orderBy(`registryOfficer.${sortBy}`, sort)
|
|
.getManyAndCount();
|
|
|
|
// const mapData1 = await Promise.all(
|
|
// lists.map(async (x) => {
|
|
// return {
|
|
// profileId: x.profileId,
|
|
// citizenId: x.citizenId,
|
|
// prefix: x.prefix,
|
|
// firstName: x.firstName,
|
|
// lastName: x.lastName,
|
|
// isProbation: x.isProbation,
|
|
// isLeave: x.isLeave,
|
|
// isRetirement: x.isRetirement,
|
|
// leaveType: x.leaveType,
|
|
// posMasterNo: x.posMasterNo,
|
|
// orgRootId: x.orgRootId,
|
|
// orgChild1Id: x.orgChild1Id,
|
|
// orgChild2Id: x.orgChild2Id,
|
|
// orgChild3Id: x.orgChild3Id,
|
|
// orgChild4Id: x.orgChild4Id,
|
|
// orgRootName: x.orgRootName,
|
|
// orgChild1Name: x.orgChild1Name,
|
|
// orgChild2Name: x.orgChild2Name,
|
|
// orgChild3Name: x.orgChild3Name,
|
|
// orgChild4Name: x.orgChild4Name,
|
|
// org: x.org,
|
|
// searchShortName: x.searchShortName,
|
|
// posExecutiveName: x.posExecutiveName,
|
|
// position: x.position,
|
|
// posTypeName: x.posTypeName,
|
|
// posLevelName: x.posLevelName,
|
|
// gender: x.gender,
|
|
// relationship: x.relationship,
|
|
// dateAppoint: x.dateAppoint,
|
|
// dateRetire: x.dateRetire,
|
|
// dateRetireLaw: x.dateRetireLaw,
|
|
// birthdate: x.birthdate,
|
|
// degree: x.degrees,
|
|
// age: x.age,
|
|
// currentPosition: null,
|
|
// lengthPosition: null,
|
|
// positionDate: {
|
|
// Years: x.Years ? x.Years : 0,
|
|
// Months: x.Months ? x.Months : 0,
|
|
// Days: x.Days ? x.Days : 0,
|
|
// },
|
|
// levelDate: {
|
|
// posExecutiveYears: x.levelYears,
|
|
// posExecutiveMonths: x.levelMonths,
|
|
// posExecutiveDays: x.levelDays,
|
|
// },
|
|
// };
|
|
// }),
|
|
// );
|
|
|
|
const mapData = [];
|
|
for await (const x of lists) {
|
|
let _educations: any = [];
|
|
if (!education && !educationLevel && !field) {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter((i: any) => i.isEducation == true)
|
|
: [];
|
|
if (_educations.length == 0) {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter((i: any) => i.isHigh == true)
|
|
: [];
|
|
// if(_educations.length == 0) {
|
|
// _educations = Array.isArray(x.Educations) && x.Educations != null
|
|
// ? (x.Educations as any[])[0]
|
|
// : []
|
|
// }
|
|
}
|
|
} else {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter(
|
|
(i: any) =>
|
|
// i.degree === education ||
|
|
// i.educationLevel === educationLevel ||
|
|
// i.field === field
|
|
(education ? i.degree?.toString().includes(education) : false) ||
|
|
(educationLevel
|
|
? i.educationLevel?.toString().includes(educationLevel)
|
|
: false) ||
|
|
(field ? i.field?.toString().includes(field) : false),
|
|
)
|
|
: [];
|
|
}
|
|
mapData.push({
|
|
profileId: x.profileId,
|
|
citizenId: x.citizenId,
|
|
prefix: x.prefix,
|
|
firstName: x.firstName,
|
|
lastName: x.lastName,
|
|
isProbation: x.isProbation,
|
|
isLeave: x.isLeave,
|
|
isRetirement: x.isRetirement,
|
|
leaveType: x.leaveType,
|
|
posMasterNo: x.posMasterNo,
|
|
orgRootId: x.orgRootId,
|
|
orgChild1Id: x.orgChild1Id,
|
|
orgChild2Id: x.orgChild2Id,
|
|
orgChild3Id: x.orgChild3Id,
|
|
orgChild4Id: x.orgChild4Id,
|
|
orgRootName: x.orgRootName,
|
|
orgChild1Name: x.orgChild1Name,
|
|
orgChild2Name: x.orgChild2Name,
|
|
orgChild3Name: x.orgChild3Name,
|
|
orgChild4Name: x.orgChild4Name,
|
|
org: x.org,
|
|
searchShortName: x.searchShortName,
|
|
posExecutiveName: x.posExecutiveName,
|
|
position: x.position,
|
|
positionArea: x.positionArea,
|
|
posTypeName: x.posTypeName,
|
|
posLevelName: x.posLevelName,
|
|
gender: x.gender,
|
|
relationship: x.relationship,
|
|
dateAppoint: x.dateAppoint,
|
|
dateRetire: x.dateRetire,
|
|
dateRetireLaw: x.dateRetireLaw,
|
|
birthdate: x.birthdate,
|
|
Educations: _educations,
|
|
// degree: x.degrees,
|
|
// educationLevel: x.educationLevels,
|
|
// field: x.fields,
|
|
age: x.age,
|
|
currentPosition: null,
|
|
lengthPosition: null,
|
|
positionDate: {
|
|
Years: x.Years ? x.Years : 0,
|
|
Months: x.Months ? x.Months : 0,
|
|
Days: x.Days ? x.Days : 0,
|
|
},
|
|
levelDate: {
|
|
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,
|
|
},
|
|
});
|
|
}
|
|
return new HttpSuccess({
|
|
data: mapData,
|
|
total: total,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* API รายงานสถิติข้อมูลลูกจ้างประจำ กทม.
|
|
*
|
|
* @summary รายงานสถิติข้อมูลลูกจ้างประจำ กทม.
|
|
*
|
|
*/
|
|
@Get("registry-emp")
|
|
async registryEmployee(
|
|
@Query() node?: number,
|
|
@Query() nodeId?: string,
|
|
@Query() posType?: string,
|
|
@Query() posLevel?: string,
|
|
@Query() position?: string,
|
|
@Query() gender?: string,
|
|
@Query() status?: string,
|
|
@Query() education?: string,
|
|
@Query() dateStart?: Date,
|
|
@Query() dateEnd?: Date,
|
|
@Query() isProbation?: boolean,
|
|
@Query() isRetire?: boolean,
|
|
@Query() isRetireLaw?: boolean,
|
|
@Query() retireType?: string,
|
|
@Query() ageMin?: number,
|
|
@Query() ageMax?: number,
|
|
@Query() tenureType?: string,
|
|
@Query() tenureMin?: number,
|
|
@Query() tenureMax?: number,
|
|
@Query() educationLevel?: string,
|
|
@Query() field?: string,
|
|
@Query() sortBy: string = "posMasterNo",
|
|
@Query() sort: "ASC" | "DESC" = "ASC",
|
|
) {
|
|
const _null: any = null;
|
|
if (!dateStart) {
|
|
dateStart = _null;
|
|
}
|
|
if (!dateEnd) {
|
|
dateEnd = _null;
|
|
}
|
|
if (ageMin && (ageMin < 18 || ageMin > 60)) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin must be between 18 and 60");
|
|
}
|
|
if (ageMax && (ageMax < 18 || ageMax > 60)) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMax must be between 18 and 60");
|
|
}
|
|
if (ageMin && ageMax && ageMin > ageMax) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ageMin cannot be greater than ageMax");
|
|
}
|
|
ageMin = ageMin ?? 18;
|
|
ageMax = ageMax ?? 60;
|
|
|
|
tenureMin = tenureMin ?? 0;
|
|
tenureMax = tenureMax ?? 20;
|
|
|
|
let nodeCondition = "1=1";
|
|
if (node === 0 && nodeId) {
|
|
nodeCondition = "registryEmployee.orgRootId = :nodeId";
|
|
} else if (node === 1 && nodeId) {
|
|
nodeCondition = "registryEmployee.orgChild1Id = :nodeId";
|
|
} else if (node === 2 && nodeId) {
|
|
nodeCondition = "registryEmployee.orgChild2Id = :nodeId";
|
|
} else if (node === 3 && nodeId) {
|
|
nodeCondition = "registryEmployee.orgChild3Id = :nodeId";
|
|
} else if (node === 4 && nodeId) {
|
|
nodeCondition = "registryEmployee.orgChild4Id = :nodeId";
|
|
}
|
|
let dateAppointCondition = "1=1";
|
|
if (dateStart && dateEnd) {
|
|
dateAppointCondition =
|
|
"DATE(registryEmployee.dateAppoint) >= :startDateAppoint AND DATE(registryEmployee.dateAppoint) <= :endDateAppoint";
|
|
} else if (dateStart) {
|
|
dateAppointCondition = "DATE(registryEmployee.dateAppoint) >= :startDateAppoint";
|
|
} else if (dateEnd) {
|
|
dateAppointCondition = "DATE(registryEmployee.dateAppoint) <= :endDateAppoint";
|
|
}
|
|
|
|
const IsLeavecondition = ["registryEmployee.isLeave = :isLeave"];
|
|
const parameters: any = { isLeave: isRetire };
|
|
if (retireType && retireType.trim() !== "") {
|
|
IsLeavecondition.push("registryEmployee.leaveType = :retireType");
|
|
parameters.retireType = retireType;
|
|
}
|
|
|
|
let tenureTypeCondition = "1=1";
|
|
if (tenureType != "" && tenureType == "position") {
|
|
tenureTypeCondition = "registryEmployee.Years BETWEEN :tenureMin AND :tenureMax";
|
|
} else if (tenureType != "" && tenureType == "level") {
|
|
tenureTypeCondition = "registryEmployee.levelYears BETWEEN :tenureMin AND :tenureMax";
|
|
}
|
|
|
|
let retireLawCondition = "1=1";
|
|
if (isRetireLaw) {
|
|
retireLawCondition =
|
|
"DATE(registryEmployee.dateRetireLaw) >= :startDateRetireLaw AND DATE(registryEmployee.dateRetireLaw) <= :endDateRetireLaw";
|
|
}
|
|
// ดึงผ่าน Table แทน View
|
|
// const [lists, total] = await AppDataSource.getRepository(viewRegistryEmployee)
|
|
const [lists, total] = await AppDataSource.getRepository(RegistryEmployee)
|
|
.createQueryBuilder("registryEmployee")
|
|
.where(nodeCondition, {
|
|
nodeId: nodeId,
|
|
})
|
|
.andWhere(tenureTypeCondition, {
|
|
tenureMin: tenureMin,
|
|
tenureMax: tenureMax,
|
|
})
|
|
.andWhere("registryEmployee.age BETWEEN :ageMin AND :ageMax", {
|
|
ageMin,
|
|
ageMax,
|
|
})
|
|
.andWhere(dateAppointCondition, {
|
|
startDateAppoint: dateStart?.toISOString().split("T")[0],
|
|
endDateAppoint: dateEnd?.toISOString().split("T")[0],
|
|
})
|
|
.andWhere(retireLawCondition, {
|
|
startDateRetireLaw: new Date(new Date().getFullYear() - 1, 9, 1, 0, 0, 0, 0)
|
|
?.toISOString()
|
|
.split("T")[0],
|
|
endDateRetireLaw: new Date(new Date().getFullYear(), 8, 30, 23, 59, 59, 999)
|
|
.toISOString()
|
|
.split("T")[0],
|
|
})
|
|
.andWhere("registryEmployee.isProbation = :isProbation", {
|
|
isProbation: isProbation,
|
|
})
|
|
.andWhere(IsLeavecondition.join(" AND "), parameters)
|
|
.andWhere("registryEmployee.employeeClass = 'PERM'")
|
|
.andWhere(
|
|
posType != null && posType != "" ? "registryEmployee.posTypeName LIKE :posTypeName" : "1=1",
|
|
{
|
|
posTypeName: `${posType}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
posLevel != null && posLevel != ""
|
|
? "registryEmployee.posLevelName LIKE :posLevelName"
|
|
: "1=1",
|
|
{
|
|
posLevelName: `${posLevel}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
position != null && position != "" ? "registryEmployee.position LIKE :position" : "1=1",
|
|
{
|
|
position: `${position}`,
|
|
},
|
|
)
|
|
.andWhere(gender != null && gender != "" ? "registryEmployee.gender LIKE :gender" : "1=1", {
|
|
gender: `${gender}`,
|
|
})
|
|
.andWhere(
|
|
status != null && status != "" ? "registryEmployee.relationship LIKE :relationship" : "1=1",
|
|
{
|
|
relationship: `${status}`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
education != null && education != "" ? "registryEmployee.degrees LIKE :degrees" : "1=1",
|
|
{
|
|
degrees: `%${education}%`,
|
|
},
|
|
)
|
|
.andWhere(
|
|
educationLevel != null && educationLevel != ""
|
|
? "registryEmployee.educationLevels LIKE :educationLevels"
|
|
: "1=1",
|
|
{
|
|
educationLevels: `%${educationLevel}%`,
|
|
},
|
|
)
|
|
.andWhere(field != null && field != "" ? "registryEmployee.fields LIKE :fields" : "1=1", {
|
|
fields: `%${field}%`,
|
|
})
|
|
.orderBy(`registryEmployee.${sortBy}`, sort)
|
|
.getManyAndCount();
|
|
|
|
const mapData = [];
|
|
for await (const x of lists) {
|
|
let _educations: any = [];
|
|
if (!education && !educationLevel && !field) {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter((i: any) => i.isEducation == true)
|
|
: [];
|
|
if (_educations.length == 0) {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter((i: any) => i.isHigh == true)
|
|
: [];
|
|
}
|
|
} else {
|
|
_educations =
|
|
Array.isArray(x.Educations) && x.Educations != null
|
|
? (x.Educations as any[]).filter(
|
|
(i: any) =>
|
|
(education ? i.degree?.toString().includes(education) : false) ||
|
|
(educationLevel
|
|
? i.educationLevel?.toString().includes(educationLevel)
|
|
: false) ||
|
|
(field ? i.field?.toString().includes(field) : false),
|
|
)
|
|
: [];
|
|
}
|
|
mapData.push({
|
|
profileId: x.profileEmployeeId,
|
|
citizenId: x.citizenId,
|
|
prefix: x.prefix,
|
|
firstName: x.firstName,
|
|
lastName: x.lastName,
|
|
isProbation: x.isProbation,
|
|
isLeave: x.isLeave,
|
|
isRetirement: x.isRetirement,
|
|
leaveType: x.leaveType,
|
|
posMasterNo: x.posMasterNo,
|
|
orgRootId: x.orgRootId,
|
|
orgChild1Id: x.orgChild1Id,
|
|
orgChild2Id: x.orgChild2Id,
|
|
orgChild3Id: x.orgChild3Id,
|
|
orgChild4Id: x.orgChild4Id,
|
|
orgRootName: x.orgRootName,
|
|
orgChild1Name: x.orgChild1Name,
|
|
orgChild2Name: x.orgChild2Name,
|
|
orgChild3Name: x.orgChild3Name,
|
|
orgChild4Name: x.orgChild4Name,
|
|
org: x.org,
|
|
searchShortName: x.searchShortName,
|
|
position: x.position,
|
|
posTypeName: x.posTypeName,
|
|
posLevelName: x.posLevelName,
|
|
gender: x.gender,
|
|
relationship: x.relationship,
|
|
dateAppoint: x.dateAppoint,
|
|
dateRetire: x.dateRetire,
|
|
dateRetireLaw: x.dateRetireLaw,
|
|
birthdate: x.birthdate,
|
|
Educations: _educations != null ? _educations : [],
|
|
// degree: x.degrees,
|
|
// educationLevel: x.educationLevels,
|
|
// field: x.fields,
|
|
age: x.age,
|
|
currentPosition: null,
|
|
lengthPosition: null,
|
|
positionDate: {
|
|
Years: x.Years ? x.Years : 0,
|
|
Months: x.Months ? x.Months : 0,
|
|
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,
|
|
},
|
|
});
|
|
}
|
|
return new HttpSuccess({
|
|
data: mapData,
|
|
total: total,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* API Report1
|
|
*
|
|
* @summary Report1
|
|
*
|
|
*/
|
|
@Post("report1")
|
|
async NewReport1(
|
|
@Body()
|
|
reqBody: {
|
|
node: number;
|
|
nodeId: string;
|
|
},
|
|
) {
|
|
let _nodeId: string = reqBody.nodeId ? reqBody.nodeId : "";
|
|
let _node: number = reqBody.node ? reqBody.node : 0;
|
|
if (_nodeId === "" || _node < 0 || _node > 4) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
|
|
let orgName: string = "";
|
|
let data = new Array();
|
|
let no = 1;
|
|
|
|
switch (_node) {
|
|
case 0: {
|
|
// ดึงข้อมูล orgRoot ตาม nodeId และลูกทั้งหมด (cascade 0..4)
|
|
const orgRootData = await this.orgRootRepository.find({
|
|
where: { id: _nodeId },
|
|
order: {
|
|
orgRootOrder: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (!orgRootData || orgRootData.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล orgRoot");
|
|
}
|
|
orgName = orgRootData[0].orgRootName ?? "";
|
|
|
|
const orgRootIds = orgRootData.map((r) => r.id) || null;
|
|
const orgChild1Data = await this.child1Repository.find({
|
|
where: { orgRootId: In(orgRootIds) },
|
|
order: {
|
|
orgChild1Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild1Ids = orgChild1Data.map((c) => c.id) || null;
|
|
const orgChild2Data = await this.child2Repository.find({
|
|
where: { orgChild1: In(orgChild1Ids) },
|
|
order: {
|
|
orgChild2Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild2Ids = orgChild2Data.map((c) => c.id) || null;
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: { orgChild2: In(orgChild2Ids) },
|
|
order: {
|
|
orgChild3Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild3Ids = orgChild3Data.map((c) => c.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: { orgChild3: In(orgChild3Ids) },
|
|
order: {
|
|
orgChild4Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
let _nodeTemp: any = null;
|
|
for (let orgRoot of orgRootData) {
|
|
const posMastersFiltered = orgRoot.posMasters
|
|
.filter((x) => x.orgChild1Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder);
|
|
|
|
for (let posMaster of posMastersFiltered) {
|
|
if (posMaster.orgChild1Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgRoot.orgRootName,
|
|
orgTreeShortName: orgRoot.orgRootShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}
|
|
_nodeTemp = null;
|
|
|
|
for (let orgChild1 of orgChild1Data.filter(
|
|
(orgChild1) => orgChild1.orgRootId === orgRoot.id,
|
|
)) {
|
|
const posMastersFiltered = orgChild1.posMasters
|
|
.filter((x) => x.orgChild2Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder);
|
|
|
|
for (let posMaster of posMastersFiltered) {
|
|
if (posMaster.orgChild2Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}
|
|
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
const posMastersFiltered = orgChild2.posMasters
|
|
.filter((x) => x.orgChild3Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder);
|
|
|
|
for (let posMaster of posMastersFiltered) {
|
|
if (posMaster.orgChild3Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}
|
|
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.filter((x) => x.orgChild4Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(
|
|
node.orgTreeName?.toString() ?? "",
|
|
),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(
|
|
node.orgTreeName?.toString() ?? "",
|
|
),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 1: {
|
|
// ดึง orgChild1 และลูก (orgChild2, orgChild3, orgChild4)
|
|
const orgChild1Data = await this.child1Repository.find({
|
|
where: { id: _nodeId },
|
|
order: {
|
|
orgChild1Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (!orgChild1Data || orgChild1Data.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล orgChild1");
|
|
}
|
|
orgName = orgChild1Data[0].orgChild1Name ?? "";
|
|
// cascade ลูก
|
|
const orgChild1Ids = orgChild1Data.map((c) => c.id) || null;
|
|
const orgChild2Data = await this.child2Repository.find({
|
|
where: { orgChild1: In(orgChild1Ids) },
|
|
order: {
|
|
orgChild2Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild2Ids = orgChild2Data.map((c) => c.id) || null;
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: { orgChild2: In(orgChild2Ids) },
|
|
order: {
|
|
orgChild3Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild3Ids = orgChild3Data.map((c) => c.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: { orgChild3: In(orgChild3Ids) },
|
|
order: {
|
|
orgChild4Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
let _nodeTemp: any = null;
|
|
for (let orgChild1 of orgChild1Data) {
|
|
await Promise.all(
|
|
orgChild1.posMasters
|
|
.filter((x) => x.orgChild2Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild2Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild2.posMasters
|
|
.filter((x) => x.orgChild3Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild3Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.filter((x) => x.orgChild4Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 2: {
|
|
// ดึง orgChild2 และลูก (orgChild3, orgChild4)
|
|
const orgChild2Data = await this.child2Repository.find({
|
|
where: {
|
|
id: _nodeId,
|
|
},
|
|
order: {
|
|
orgChild2Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (!orgChild2Data || orgChild2Data.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล orgChild2");
|
|
}
|
|
orgName = orgChild2Data[0].orgChild2Name ?? "";
|
|
// cascade ลูก
|
|
const orgChild2Ids = orgChild2Data.map((c) => c.id) || null;
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: { orgChild2: In(orgChild2Ids) },
|
|
order: {
|
|
orgChild3Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgChild3Ids = orgChild3Data.map((c) => c.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: { orgChild3: In(orgChild3Ids) },
|
|
order: {
|
|
orgChild4Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
let _nodeTemp: any = null;
|
|
for (let orgChild2 of orgChild2Data) {
|
|
await Promise.all(
|
|
orgChild2.posMasters
|
|
.filter((x) => x.orgChild3Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild3Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.filter((x) => x.orgChild4Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(
|
|
node.orgTreeShortName?.toString() ?? "",
|
|
),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 3: {
|
|
// ดึง orgChild3 และลูก (orgChild4)
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: { id: _nodeId },
|
|
order: {
|
|
orgChild3Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (!orgChild3Data || orgChild3Data.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล orgChild3");
|
|
}
|
|
orgName = orgChild3Data[0].orgChild3Name ?? "";
|
|
// cascade ลูก
|
|
const orgChild3Ids = orgChild3Data.map((c) => c.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: { orgChild3: In(orgChild3Ids) },
|
|
order: {
|
|
orgChild4Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
let _nodeTemp: any = null;
|
|
for (let orgChild3 of orgChild3Data) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.filter((x) => x.orgChild4Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}
|
|
}),
|
|
);
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
// --- push data logic (เหมือน node 0) ---
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 4: {
|
|
// ดึงข้อมูล orgChild4 ตาม nodeId
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: { id: _nodeId },
|
|
order: {
|
|
orgChild4Order: "ASC",
|
|
posMasters: {
|
|
posMasterOrder: "ASC",
|
|
posMasterCreatedAt: "ASC",
|
|
},
|
|
},
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (!orgChild4Data || orgChild4Data.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล orgChild4");
|
|
}
|
|
orgName = orgChild4Data[0].orgChild4Name ?? "";
|
|
let _nodeTemp: any = null;
|
|
for (let orgChild4 of orgChild4Data) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_nodeTemp == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName?.toString() ?? ""),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName?.toString() ?? ""),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _nodeTemp.orgTreeShortName ||
|
|
node.orgTreeName != _nodeTemp.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _nodeTemp.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _nodeTemp.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_nodeTemp = null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_nodeTemp = node;
|
|
}),
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
default: {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
}
|
|
|
|
return new HttpSuccess({
|
|
template: "report1",
|
|
reportName: "report1",
|
|
data: { org: orgName, data },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* API Report1
|
|
*
|
|
* @summary Report1
|
|
*
|
|
*/
|
|
@Get("report1/{rootId}")
|
|
async findReport1(@Path() rootId: string) {
|
|
// const orgRevision = await this.orgRevisionRepository.findOne({
|
|
// where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false },
|
|
// relations: ["orgRoots"],
|
|
// });
|
|
// if (!orgRevision) {
|
|
// throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
// }
|
|
|
|
const orgRootData = await this.orgRootRepository.find({
|
|
where: {
|
|
id: rootId,
|
|
// orgRevisionId: orgRevision.id,
|
|
},
|
|
order: { orgRootOrder: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
const orgName = orgRootData[0].orgRootName ?? "";
|
|
const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null;
|
|
const orgChild1Data = await this.child1Repository.find({
|
|
where: {
|
|
orgRootId: In(orgRootIds),
|
|
},
|
|
order: { orgChild1Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id) || null;
|
|
const orgChild2Data = await this.child2Repository.find({
|
|
where: {
|
|
orgChild1: In(orgChild1Ids),
|
|
},
|
|
order: { orgChild2Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id) || null;
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: {
|
|
orgChild2: In(orgChild2Ids),
|
|
},
|
|
order: { orgChild3Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: {
|
|
orgChild3: In(orgChild3Ids),
|
|
},
|
|
order: { orgChild4Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
let data = new Array();
|
|
let _node: any;
|
|
let no = 1;
|
|
for (let orgRoot of orgRootData) {
|
|
await Promise.all(
|
|
orgRoot.posMasters
|
|
.filter((x) => x.orgChild1Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild1Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgRoot.orgRootName,
|
|
orgTreeShortName: orgRoot.orgRootShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild1 of orgChild1Data.filter(
|
|
(orgChild1) => orgChild1.orgRootId === orgRoot.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild1.posMasters
|
|
.filter((x) => x.orgChild2Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild2Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName
|
|
? ""
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild2.posMasters
|
|
.filter((x) => x.orgChild3Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild3Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea ? `${x.positionName} (${x.positionArea})` : x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.filter((x) => x.orgChild4Id == null)
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
const positionName = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.sort((a: any, b: any) => a.orderNo - b.orderNo)
|
|
.map((x) =>
|
|
x.positionArea
|
|
? `${x.positionName} (${x.positionArea})`
|
|
: x.positionName,
|
|
),
|
|
),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) =>
|
|
x.positionExecutiveField
|
|
? `${x.posExecutive.posExecutiveName} (${x.positionExecutiveField})`
|
|
: x.posExecutive.posExecutiveName,
|
|
),
|
|
),
|
|
];
|
|
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName: positionName.join(" หรือ "),
|
|
posType: posType.join(" หรือ "),
|
|
posLevel: posLevel.join(" หรือ "),
|
|
posExecutive: posExecutive.join(" หรือ "),
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
reason: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}),
|
|
);
|
|
_node = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return new HttpSuccess({
|
|
template: "report1",
|
|
reportName: "report1",
|
|
data: { org: orgName, data },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* API Report2
|
|
*
|
|
* @summary Report2
|
|
*
|
|
*/
|
|
@Post("report2")
|
|
async NewReport2(
|
|
@Body()
|
|
reqBody: {
|
|
node: number;
|
|
nodeId: string;
|
|
},
|
|
) {
|
|
// @Get("report2/{rootId}")
|
|
// async findReport2(@Path() rootId: string) {
|
|
// const orgRevision = await this.orgRevisionRepository.findOne({
|
|
// where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false },
|
|
// relations: ["orgRoots"],
|
|
// });
|
|
// if (!orgRevision) {
|
|
// throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
// }
|
|
// (async () => {
|
|
let nodeId: string = reqBody.nodeId ? reqBody.nodeId : "";
|
|
let node: number = reqBody.node ? reqBody.node : 0;
|
|
if (nodeId === "" || node < 0 || node > 4) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
// ดึงแค่ rootId ก่อน ถ้าลูกค้า confirm ค่อยปรับ
|
|
switch (node) {
|
|
case 0: {
|
|
const orgRoot = await this.orgRootRepository.findOne({
|
|
select: ["id"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgRoot.id;
|
|
break;
|
|
}
|
|
case 1: {
|
|
const orgChild1 = await this.child1Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild1.orgRootId;
|
|
break;
|
|
}
|
|
case 2: {
|
|
const orgChild2 = await this.child2Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild2.orgRootId;
|
|
break;
|
|
}
|
|
case 3: {
|
|
const orgChild3 = await this.child3Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild3.orgRootId;
|
|
break;
|
|
}
|
|
case 4: {
|
|
const orgChild4 = await this.child4Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild4.orgRootId;
|
|
break;
|
|
}
|
|
default:
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
// Step 1: ดึงข้อมูล OrgRoot พื้นฐาน
|
|
const orgRootData = await this.orgRootRepository
|
|
.createQueryBuilder("orgRoot")
|
|
.select([
|
|
"orgRoot.id",
|
|
"orgRoot.orgRootName",
|
|
"orgRoot.orgRootShortName",
|
|
"orgRoot.orgRootOrder",
|
|
])
|
|
.where("orgRoot.id = :nodeId", { nodeId })
|
|
.orderBy("orgRoot.orgRootOrder", "ASC")
|
|
.getMany();
|
|
|
|
if (!orgRootData || orgRootData.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร");
|
|
}
|
|
|
|
// Step 2: ดึงข้อมูล PosMasters ที่เกี่ยวข้องเท่านั้น
|
|
const posMastersData = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgRootId",
|
|
"posMaster.orgChild1Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgRootId = :nodeId", { nodeId })
|
|
.andWhere("posMaster.orgChild1Id IS NULL") // เฉพาะ root level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
|
|
// Step 3: ดึงข้อมูล Profiles ที่ใช้จริงเท่านั้น
|
|
const profileIds = [
|
|
...new Set([
|
|
...posMastersData.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...posMastersData.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
];
|
|
|
|
let profilesData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
profilesData = await this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...profileIds)", { profileIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Step 4: ดึงข้อมูล Education ล่าสุดของแต่ละ Profile
|
|
let educationsData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
educationsData = await this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...profileIds)", { profileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MAX(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...profileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ profileIds },
|
|
)
|
|
.getMany();
|
|
}
|
|
|
|
// Step 5: ดึงข้อมูล Salary ล่าสุดของแต่ละ Profile
|
|
let salariesData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
salariesData = await this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select(["ps.profileId", "ps.commandDateAffect", "ps.amount"])
|
|
.where("ps.profileId IN (:...profileIds)", { profileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...profileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ profileIds },
|
|
)
|
|
.getMany();
|
|
}
|
|
|
|
// Step 6: ดึงข้อมูล Positions ที่เกี่ยวข้อง
|
|
const posMasterIds = posMastersData.map((pm: any) => pm.id);
|
|
let positionsData: any[] = [];
|
|
if (posMasterIds.length > 0) {
|
|
positionsData = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...posMasterIds)", { posMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Step 7: Combine ข้อมูลกลับเหมือนเดิม
|
|
for (let orgRoot of orgRootData) {
|
|
orgRoot.posMasters = posMastersData.filter((pm: any) => pm.orgRootId === orgRoot.id);
|
|
|
|
for (let posMaster of orgRoot.posMasters) {
|
|
// Attach current_holder
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = profilesData.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = educationsData.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = salariesData.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Attach next_holder
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = profilesData.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = educationsData.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = salariesData.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Attach positions
|
|
posMaster.positions = positionsData.filter((pos: any) => pos.posMasterId === posMaster.id);
|
|
}
|
|
}
|
|
|
|
if (!orgRootData || orgRootData.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร");
|
|
}
|
|
|
|
const orgName = orgRootData[0].orgRootName ?? "";
|
|
const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null;
|
|
|
|
// Step 8: ปรับปรุง orgChild1Data - ใช้ optimized approach
|
|
const orgChild1Data = await this.child1Repository
|
|
.createQueryBuilder("orgChild1")
|
|
.select([
|
|
"orgChild1.id",
|
|
"orgChild1.orgRootId",
|
|
"orgChild1.orgChild1Name",
|
|
"orgChild1.orgChild1ShortName",
|
|
"orgChild1.orgChild1Order",
|
|
])
|
|
.where("orgChild1.orgRootId IN (:...orgRootIds)", { orgRootIds })
|
|
.orderBy("orgChild1.orgChild1Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild1
|
|
const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id);
|
|
let child1PosMasters: any[] = [];
|
|
if (orgChild1Ids.length > 0) {
|
|
child1PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild1Id",
|
|
"posMaster.orgChild2Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild1Id IN (:...orgChild1Ids)", { orgChild1Ids })
|
|
.andWhere("posMaster.orgChild2Id IS NULL") // เฉพาะ child1 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child1
|
|
const child1ProfileIds =
|
|
child1PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child1PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child1PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child1
|
|
let child1Profiles: any[] = [];
|
|
let child1Educations: any[] = [];
|
|
let child1Salaries: any[] = [];
|
|
let child1Positions: any[] = [];
|
|
|
|
if (child1ProfileIds.length > 0) {
|
|
[child1Profiles, child1Educations, child1Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MAX(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child1ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child1ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select(["ps.profileId", "ps.commandDateAffect", "ps.amount"])
|
|
.where("ps.profileId IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child1ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child1ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child1PosMasters.length > 0) {
|
|
const child1PosMasterIds = child1PosMasters.map((pm: any) => pm.id);
|
|
child1Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child1PosMasterIds)", { child1PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild1
|
|
for (let orgChild1 of orgChild1Data) {
|
|
orgChild1.posMasters = child1PosMasters.filter((pm: any) => pm.orgChild1Id === orgChild1.id);
|
|
|
|
for (let posMaster of orgChild1.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child1Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child1Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child1Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child1Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child1Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child1Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child1Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 9: ปรับปรุง orgChild2Data
|
|
const originalOrgChild1Ids =
|
|
orgChild1Data.length > 0 ? orgChild1Data.map((orgChild1) => orgChild1.id) : [];
|
|
const orgChild2Data = await this.child2Repository
|
|
.createQueryBuilder("orgChild2")
|
|
.select([
|
|
"orgChild2.id",
|
|
"orgChild2.orgChild1Id",
|
|
"orgChild2.orgChild2Name",
|
|
"orgChild2.orgChild2ShortName",
|
|
"orgChild2.orgChild2Order",
|
|
])
|
|
.where(
|
|
originalOrgChild1Ids.length > 0
|
|
? "orgChild2.orgChild1Id IN (:...originalOrgChild1Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild1Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild2.orgChild2Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild2
|
|
const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id);
|
|
let child2PosMasters: any[] = [];
|
|
if (orgChild2Ids.length > 0) {
|
|
child2PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild2Id",
|
|
"posMaster.orgChild3Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild2Id IN (:...orgChild2Ids)", { orgChild2Ids })
|
|
.andWhere("posMaster.orgChild3Id IS NULL") // เฉพาะ child2 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child2
|
|
const child2ProfileIds =
|
|
child2PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child2PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child2PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child2
|
|
let child2Profiles: any[] = [];
|
|
let child2Educations: any[] = [];
|
|
let child2Salaries: any[] = [];
|
|
let child2Positions: any[] = [];
|
|
|
|
if (child2ProfileIds.length > 0) {
|
|
[child2Profiles, child2Educations, child2Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MAX(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child2ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child2ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select(["ps.profileId", "ps.commandDateAffect", "ps.amount"])
|
|
.where("ps.profileId IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child2ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child2ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child2PosMasters.length > 0) {
|
|
const child2PosMasterIds = child2PosMasters.map((pm: any) => pm.id);
|
|
child2Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child2PosMasterIds)", { child2PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild2
|
|
for (let orgChild2 of orgChild2Data) {
|
|
orgChild2.posMasters = child2PosMasters.filter((pm: any) => pm.orgChild2Id === orgChild2.id);
|
|
|
|
for (let posMaster of orgChild2.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child2Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child2Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child2Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child2Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child2Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child2Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child2Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 10: ปรับปรุง orgChild3Data
|
|
const originalOrgChild2Ids =
|
|
orgChild2Data.length > 0 ? orgChild2Data.map((orgChild2) => orgChild2.id) : [];
|
|
const orgChild3Data = await this.child3Repository
|
|
.createQueryBuilder("orgChild3")
|
|
.select([
|
|
"orgChild3.id",
|
|
"orgChild3.orgChild2Id",
|
|
"orgChild3.orgChild3Name",
|
|
"orgChild3.orgChild3ShortName",
|
|
"orgChild3.orgChild3Order",
|
|
])
|
|
.where(
|
|
originalOrgChild2Ids.length > 0
|
|
? "orgChild3.orgChild2Id IN (:...originalOrgChild2Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild2Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild3.orgChild3Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild3
|
|
const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id);
|
|
let child3PosMasters: any[] = [];
|
|
if (orgChild3Ids.length > 0) {
|
|
child3PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild3Id",
|
|
"posMaster.orgChild4Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild3Id IN (:...orgChild3Ids)", { orgChild3Ids })
|
|
.andWhere("posMaster.orgChild4Id IS NULL") // เฉพาะ child3 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child3
|
|
const child3ProfileIds =
|
|
child3PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child3PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child3PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child3
|
|
let child3Profiles: any[] = [];
|
|
let child3Educations: any[] = [];
|
|
let child3Salaries: any[] = [];
|
|
let child3Positions: any[] = [];
|
|
|
|
if (child3ProfileIds.length > 0) {
|
|
[child3Profiles, child3Educations, child3Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MAX(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child3ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child3ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select(["ps.profileId", "ps.commandDateAffect", "ps.amount"])
|
|
.where("ps.profileId IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child3ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child3ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child3PosMasters.length > 0) {
|
|
const child3PosMasterIds = child3PosMasters.map((pm: any) => pm.id);
|
|
child3Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child3PosMasterIds)", { child3PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild3
|
|
for (let orgChild3 of orgChild3Data) {
|
|
orgChild3.posMasters = child3PosMasters.filter((pm: any) => pm.orgChild3Id === orgChild3.id);
|
|
|
|
for (let posMaster of orgChild3.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child3Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child3Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child3Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child3Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child3Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child3Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child3Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 11: ปรับปรุง orgChild4Data
|
|
const originalOrgChild3Ids =
|
|
orgChild3Data.length > 0 ? orgChild3Data.map((orgChild3) => orgChild3.id) : [];
|
|
const orgChild4Data = await this.child4Repository
|
|
.createQueryBuilder("orgChild4")
|
|
.select([
|
|
"orgChild4.id",
|
|
"orgChild4.orgChild3Id",
|
|
"orgChild4.orgChild4Name",
|
|
"orgChild4.orgChild4ShortName",
|
|
"orgChild4.orgChild4Order",
|
|
])
|
|
.where(
|
|
originalOrgChild3Ids.length > 0
|
|
? "orgChild4.orgChild3Id IN (:...originalOrgChild3Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild3Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild4.orgChild4Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild4
|
|
const orgChild4Ids = orgChild4Data.map((orgChild4) => orgChild4.id);
|
|
let child4PosMasters: any[] = [];
|
|
if (orgChild4Ids.length > 0) {
|
|
child4PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild4Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild4Id IN (:...orgChild4Ids)", { orgChild4Ids })
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child4
|
|
const child4ProfileIds =
|
|
child4PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child4PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child4PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child4
|
|
let child4Profiles: any[] = [];
|
|
let child4Educations: any[] = [];
|
|
let child4Salaries: any[] = [];
|
|
let child4Positions: any[] = [];
|
|
|
|
if (child4ProfileIds.length > 0) {
|
|
[child4Profiles, child4Educations, child4Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MAX(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child4ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child4ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select(["ps.profileId", "ps.commandDateAffect", "ps.amount"])
|
|
.where("ps.profileId IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child4ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child4ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child4PosMasters.length > 0) {
|
|
const child4PosMasterIds = child4PosMasters.map((pm: any) => pm.id);
|
|
child4Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child4PosMasterIds)", { child4PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild4
|
|
for (let orgChild4 of orgChild4Data) {
|
|
orgChild4.posMasters = child4PosMasters.filter((pm: any) => pm.orgChild4Id === orgChild4.id);
|
|
|
|
for (let posMaster of orgChild4.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child4Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child4Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child4Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child4Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child4Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child4Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child4Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
let orgRevisionActive: any = await this.orgRevisionRepository
|
|
.createQueryBuilder("orgRevision")
|
|
.select([
|
|
"orgRevision.id",
|
|
"orgRevision.orgRevisionIsCurrent",
|
|
"orgRevision.orgRevisionIsDraft",
|
|
"orgRevision.createdAt",
|
|
])
|
|
.leftJoinAndSelect("orgRevision.posMasters", "posMasters")
|
|
.leftJoinAndSelect("posMasters.positions", "positions")
|
|
.leftJoinAndSelect("positions.posType", "posType")
|
|
.leftJoinAndSelect("positions.posLevel", "posLevel")
|
|
.leftJoinAndSelect("positions.posExecutive", "posExecutive")
|
|
.addSelect([
|
|
"posMasters.posMasterOrder",
|
|
"posMasters.posMasterNo",
|
|
"posMasters.ancestorDNA",
|
|
"posMasters.orgRevisionId",
|
|
])
|
|
.addSelect(["positions.positionName", "positions.positionIsSelected"])
|
|
.addSelect(["posType.posTypeName"])
|
|
.addSelect(["posLevel.posLevelName"])
|
|
.addSelect(["posExecutive.posExecutiveName"])
|
|
.where("orgRevision.orgRevisionIsCurrent = :isCurrent", { isCurrent: true })
|
|
.andWhere("orgRevision.orgRevisionIsDraft = :isDraft", { isDraft: false })
|
|
.getOne();
|
|
|
|
if (orgRevisionActive == null) {
|
|
const _orgRevisionActive = await this.orgRevisionRepository
|
|
.createQueryBuilder("orgRevision")
|
|
.select([
|
|
"orgRevision.id",
|
|
"orgRevision.orgRevisionIsCurrent",
|
|
"orgRevision.orgRevisionIsDraft",
|
|
"orgRevision.createdAt",
|
|
])
|
|
.leftJoinAndSelect("orgRevision.posMasters", "posMasters")
|
|
.leftJoinAndSelect("posMasters.positions", "positions")
|
|
.leftJoinAndSelect("positions.posType", "posType")
|
|
.leftJoinAndSelect("positions.posLevel", "posLevel")
|
|
.leftJoinAndSelect("positions.posExecutive", "posExecutive")
|
|
.addSelect([
|
|
"posMasters.posMasterOrder",
|
|
"posMasters.posMasterNo",
|
|
"posMasters.ancestorDNA",
|
|
"posMasters.orgRevisionId",
|
|
])
|
|
.addSelect(["positions.positionName", "positions.positionIsSelected"])
|
|
.addSelect(["posType.posTypeName"])
|
|
.addSelect(["posLevel.posLevelName"])
|
|
.addSelect(["posExecutive.posExecutiveName"])
|
|
.orderBy("orgRevision.createdAt", "DESC")
|
|
.skip(1)
|
|
.take(1)
|
|
.getMany();
|
|
if (_orgRevisionActive.length > 0) orgRevisionActive = _orgRevisionActive[0];
|
|
}
|
|
|
|
let data = new Array();
|
|
let _node: any;
|
|
let no = 1;
|
|
|
|
for (let orgRoot of orgRootData) {
|
|
const posMastersFiltered = orgRoot.posMasters.sort(
|
|
(a, b) => a.posMasterOrder - b.posMasterOrder,
|
|
);
|
|
|
|
for (let posMaster of posMastersFiltered) {
|
|
if (posMaster.orgChild1Id == null) {
|
|
// Use temporary arrays to reduce memory allocation
|
|
const posNames = posMaster.positions.map((x) => x.positionName);
|
|
const positionName = [...new Set(posNames)];
|
|
|
|
const typeNames = posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName);
|
|
const posType = [...new Set(typeNames)];
|
|
|
|
const levelNames = posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName);
|
|
const posLevel = [...new Set(levelNames)];
|
|
|
|
const execNames = posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName);
|
|
const posExecutive = [...new Set(execNames)];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.next_holder != null && posMaster.next_holder.current_holders) {
|
|
positionMasterProfileOld = posMaster.next_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (
|
|
posMaster.ancestorDNA != null &&
|
|
posMaster.ancestorDNA != "" &&
|
|
orgRevisionActive &&
|
|
orgRevisionActive.posMasters
|
|
) {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id && x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
if (positionMasterOld && positionMasterOld.positions) {
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
}
|
|
if (positionMasterProfileOld == null && posMaster.next_holder != null
|
|
&& posMaster.next_holder.current_holders == null
|
|
) {
|
|
positionMasterProfileOld = positionMasterOld
|
|
}
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgRoot.orgRootName,
|
|
orgTreeShortName: orgRoot.orgRootShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.next_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.next_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: posMaster.next_holder.posType == null
|
|
? "-"
|
|
: posMaster.next_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.next_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: posMaster.next_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.next_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.next_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive
|
|
?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.next_holder == null
|
|
? orgRoot.orgRootName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.next_holder == null
|
|
? orgRoot.orgRootShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
|
: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.next_holder.position,
|
|
profilePosType:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posType.posTypeName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posType?.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posLevel.posLevelName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posLevel?.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgShortName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null ? "" : Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null ? "" : Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType: node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}
|
|
_node = null;
|
|
|
|
for (let orgChild1 of orgChild1Data.filter(
|
|
(orgChild1) => orgChild1.orgRootId === orgRoot.id,
|
|
)) {
|
|
const posMastersFiltered1 = orgChild1.posMasters.sort(
|
|
(a, b) => a.posMasterOrder - b.posMasterOrder,
|
|
);
|
|
for (let posMaster of posMastersFiltered1) {
|
|
if (posMaster.orgChild2Id == null) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.next_holder != null && posMaster.next_holder.current_holders) {
|
|
positionMasterProfileOld = posMaster.next_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (
|
|
posMaster.ancestorDNA != null &&
|
|
posMaster.ancestorDNA != "" &&
|
|
orgRevisionActive &&
|
|
orgRevisionActive.posMasters
|
|
) {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id && x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
if (positionMasterOld && positionMasterOld.positions) {
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
}
|
|
if (positionMasterProfileOld == null && posMaster.next_holder != null
|
|
&& posMaster.next_holder.current_holders == null
|
|
) {
|
|
positionMasterProfileOld = positionMasterOld
|
|
}
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.next_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.next_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: posMaster.next_holder.posType == null
|
|
? "-"
|
|
: posMaster.next_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.next_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: posMaster.next_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.next_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.next_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.next_holder == null
|
|
? orgChild1.orgChild1Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.next_holder == null
|
|
? orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
|
: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.next_holder.position,
|
|
profilePosType:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posType.posTypeName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posType?.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posLevel.posLevelName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posLevel?.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgShortName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}
|
|
_node = null;
|
|
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
const posMastersFiltered2 = orgChild2.posMasters.sort(
|
|
(a, b) => a.posMasterOrder - b.posMasterOrder,
|
|
);
|
|
for (let posMaster of posMastersFiltered2) {
|
|
if (posMaster.orgChild3Id == null) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.next_holder != null && posMaster.next_holder.current_holders) {
|
|
positionMasterProfileOld = posMaster.next_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (
|
|
posMaster.ancestorDNA != null &&
|
|
posMaster.ancestorDNA != "" &&
|
|
orgRevisionActive &&
|
|
orgRevisionActive.posMasters
|
|
) {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
if (positionMasterOld && positionMasterOld.positions) {
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
}
|
|
if (positionMasterProfileOld == null && posMaster.next_holder != null
|
|
&& posMaster.next_holder.current_holders == null
|
|
) {
|
|
positionMasterProfileOld = positionMasterOld
|
|
}
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.next_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.next_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: posMaster.next_holder.posType == null
|
|
? "-"
|
|
: posMaster.next_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.next_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: posMaster.next_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.next_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.next_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.next_holder == null
|
|
? orgChild2.orgChild2Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.next_holder == null
|
|
? orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
|
: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.next_holder.position,
|
|
profilePosType:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posType.posTypeName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posType?.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posLevel.posLevelName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posLevel?.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgShortName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}
|
|
_node = null;
|
|
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
const posMastersFiltered3 = orgChild3.posMasters.sort(
|
|
(a, b) => a.posMasterOrder - b.posMasterOrder,
|
|
);
|
|
for (let posMaster of posMastersFiltered3) {
|
|
if (posMaster.orgChild4Id == null) {
|
|
console.log(posMaster);
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.next_holder != null && posMaster.next_holder.current_holders) {
|
|
positionMasterProfileOld = posMaster.next_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (
|
|
posMaster.ancestorDNA != null &&
|
|
posMaster.ancestorDNA != "" &&
|
|
orgRevisionActive &&
|
|
orgRevisionActive.posMasters
|
|
) {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
if (positionMasterOld && positionMasterOld.positions) {
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
}
|
|
if (positionMasterProfileOld == null && posMaster.next_holder != null
|
|
&& posMaster.next_holder.current_holders == null
|
|
) {
|
|
positionMasterProfileOld = positionMasterOld
|
|
}
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.next_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.next_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.next_holder.posType == null
|
|
? "-"
|
|
: posMaster.next_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.next_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.next_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.next_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.next_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.next_holder == null
|
|
? orgChild3.orgChild3Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.next_holder == null
|
|
? orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
|
: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.next_holder.position,
|
|
profilePosType:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posType.posTypeName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posType?.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posLevel.posLevelName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posLevel?.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgShortName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}
|
|
console.log("Processing orgChild4");
|
|
_node = null;
|
|
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
const posMastersFiltered4 = orgChild4.posMasters.sort(
|
|
(a, b) => a.posMasterOrder - b.posMasterOrder,
|
|
);
|
|
for (let posMaster of posMastersFiltered4) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.next_holder != null && posMaster.next_holder.current_holders) {
|
|
positionMasterProfileOld = posMaster.next_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (
|
|
posMaster.ancestorDNA != null &&
|
|
posMaster.ancestorDNA != "" &&
|
|
orgRevisionActive &&
|
|
orgRevisionActive.posMasters
|
|
) {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
if (positionMasterOld && positionMasterOld.positions) {
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
} else {
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
}
|
|
if (positionMasterProfileOld == null && posMaster.next_holder != null
|
|
&& posMaster.next_holder.current_holders == null
|
|
) {
|
|
positionMasterProfileOld = positionMasterOld
|
|
}
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.next_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.next_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.next_holder.posType == null
|
|
? "-"
|
|
: posMaster.next_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.next_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.next_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.next_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.next_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.next_holder == null
|
|
? orgChild4.orgChild4Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.next_holder == null
|
|
? orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
|
: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.next_holder.position,
|
|
profilePosType:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posType.posTypeName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posType?.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
// : posMaster.next_holder.posLevel.posLevelName,
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posLevel?.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.next_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
posMaster.next_holder == null
|
|
? Extension.ToThaiNumber(node.profileOrgShortName.toString())
|
|
: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
_node = null;
|
|
} // End for orgChild4
|
|
} // End for orgChild3
|
|
} // End for orgChild2
|
|
} // End for orgChild1
|
|
} // End for orgRoot
|
|
|
|
// const metaData = { template: "report2", reportName: "report2", data: { data } };
|
|
// sendWebSocket(metaData);
|
|
// })();
|
|
|
|
return new HttpSuccess({
|
|
template: "report2",
|
|
reportName: "report2",
|
|
data: { org: orgName, data },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* API Report2
|
|
*
|
|
* @summary Report2
|
|
*
|
|
*/
|
|
@Get("report2-history/{rootId}")
|
|
async findReport2History(@Path() rootId: string) {
|
|
const orgRootData = await this.orgRootRepository.find({
|
|
where: {
|
|
id: rootId,
|
|
},
|
|
order: { orgRootOrder: "ASC" },
|
|
relations: [
|
|
"orgRevision",
|
|
"posMasters",
|
|
"posMasters.orgRoot",
|
|
"posMasters.orgChild1",
|
|
"posMasters.orgChild2",
|
|
"posMasters.orgChild3",
|
|
"posMasters.orgChild4",
|
|
"posMasters.current_holder",
|
|
"posMasters.current_holder.posLevel",
|
|
"posMasters.current_holder.posType",
|
|
"posMasters.current_holder.profileSalary",
|
|
"posMasters.current_holder.profileEducations",
|
|
"posMasters.current_holder.current_holders",
|
|
"posMasters.current_holder.current_holders.positions",
|
|
"posMasters.current_holder.current_holders.orgRoot",
|
|
"posMasters.current_holder.current_holders.orgChild1",
|
|
"posMasters.current_holder.current_holders.orgChild2",
|
|
"posMasters.current_holder.current_holders.orgChild3",
|
|
"posMasters.current_holder.current_holders.orgChild4",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
|
|
const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null;
|
|
const orgChild1Data = await this.child1Repository.find({
|
|
where: {
|
|
orgRootId: In(orgRootIds),
|
|
},
|
|
order: { orgChild1Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.current_holder",
|
|
"posMasters.current_holder.profileSalary",
|
|
"posMasters.current_holder.profileEducations",
|
|
"posMasters.positions",
|
|
],
|
|
});
|
|
|
|
const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id) || null;
|
|
const orgChild2Data = await this.child2Repository.find({
|
|
where: {
|
|
orgChild1: In(orgChild1Ids),
|
|
},
|
|
order: { orgChild2Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.current_holder",
|
|
"posMasters.current_holder.profileSalary",
|
|
"posMasters.current_holder.profileEducations",
|
|
"posMasters.positions",
|
|
],
|
|
});
|
|
|
|
const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id) || null;
|
|
const orgChild3Data = await this.child3Repository.find({
|
|
where: {
|
|
orgChild2: In(orgChild2Ids),
|
|
},
|
|
order: { orgChild3Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.current_holder",
|
|
"posMasters.current_holder.profileSalary",
|
|
"posMasters.current_holder.profileEducations",
|
|
"posMasters.positions",
|
|
],
|
|
});
|
|
|
|
const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id) || null;
|
|
const orgChild4Data = await this.child4Repository.find({
|
|
where: {
|
|
orgChild3: In(orgChild3Ids),
|
|
},
|
|
order: { orgChild4Order: "ASC" },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.current_holder",
|
|
"posMasters.current_holder.profileSalary",
|
|
"posMasters.current_holder.profileEducations",
|
|
"posMasters.positions",
|
|
],
|
|
});
|
|
|
|
if (orgRootData.length <= 0) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบโครงสร้าง");
|
|
const _orgRevisionActive = await this.orgRevisionRepository.find({
|
|
where: { createdAt: LessThan(orgRootData[0]?.createdAt ?? new Date()) },
|
|
order: { createdAt: "DESC" },
|
|
skip: 1,
|
|
take: 2,
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (_orgRevisionActive.length <= 0) {
|
|
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลประวัติโครงสร้าง");
|
|
}
|
|
let orgRevisionActive = _orgRevisionActive[0];
|
|
|
|
let data = new Array();
|
|
let _node: any;
|
|
let no = 1;
|
|
for (let orgRoot of orgRootData) {
|
|
await Promise.all(
|
|
orgRoot.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild1Id == null) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.current_holder != null) {
|
|
positionMasterProfileOld = posMaster.current_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations
|
|
.filter((x) => x.isEducation == true || x.isUse == true)
|
|
.sort((a, b) => {
|
|
// (b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
// (a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
if (a.isEducation !== b.isEducation) {
|
|
return a.isEducation ? -1 : 1;
|
|
}
|
|
return b.level - a.level;
|
|
});
|
|
if (_education.length > 0) {
|
|
// education = _education[0];
|
|
education = _education.map((e: any) => e.degree).join(", ");
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgRoot.orgRootName,
|
|
orgTreeShortName: orgRoot.orgRootShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.current_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.current_holder.position,
|
|
posType:
|
|
posMaster.current_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.current_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.current_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.current_holder == null
|
|
? orgRoot.orgRootName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.current_holder == null
|
|
? orgRoot.orgRootShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.current_holder.position,
|
|
profilePosType:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profileOrgShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild1 of orgChild1Data.filter(
|
|
(orgChild1) => orgChild1.orgRootId === orgRoot.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild1.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild2Id == null) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.current_holder != null) {
|
|
positionMasterProfileOld = posMaster.current_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations
|
|
.filter((x) => x.isEducation == true || x.isUse == true)
|
|
.sort((a, b) => {
|
|
if (a.isEducation !== b.isEducation) {
|
|
return a.isEducation ? -1 : 1;
|
|
}
|
|
return b.level - a.level;
|
|
});
|
|
if (_education.length > 0) {
|
|
education = _education.map((e: any) => e.degree).join(", ");
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.current_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.current_holder.position,
|
|
posType:
|
|
posMaster.current_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.current_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.current_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.current_holder == null
|
|
? orgChild1.orgChild1Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.current_holder == null
|
|
? orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.current_holder.position,
|
|
profilePosType:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profileOrgShortName.toString()),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(node.profilePosMasterNo.toString()),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild2.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild3Id == null) {
|
|
const positionName = [...new Set(posMaster.positions.map((x) => x.positionName))];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.current_holder != null) {
|
|
positionMasterProfileOld = posMaster.current_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations
|
|
.filter((x) => x.isEducation == true || x.isUse == true)
|
|
.sort((a, b) => {
|
|
if (a.isEducation !== b.isEducation) {
|
|
return a.isEducation ? -1 : 1;
|
|
}
|
|
return b.level - a.level;
|
|
});
|
|
if (_education.length > 0) {
|
|
education = _education.map((e: any) => e.degree).join(", ");
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.current_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.current_holder.position,
|
|
posType:
|
|
posMaster.current_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.current_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.current_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.current_holder == null
|
|
? orgChild2.orgChild2Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.current_holder == null
|
|
? orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.current_holder.position,
|
|
profilePosType:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profileOrgShortName.toString(),
|
|
),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null) {
|
|
const positionName = [
|
|
...new Set(posMaster.positions.map((x) => x.positionName)),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.current_holder != null) {
|
|
positionMasterProfileOld = posMaster.current_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations
|
|
.filter((x) => x.isEducation == true || x.isUse == true)
|
|
.sort((a, b) => {
|
|
if (a.isEducation !== b.isEducation) {
|
|
return a.isEducation ? -1 : 1;
|
|
}
|
|
return b.level - a.level;
|
|
});
|
|
if (_education.length > 0) {
|
|
education = _education.map((e: any) => e.degree).join(", ");
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.current_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.current_holder.position,
|
|
posType:
|
|
posMaster.current_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.current_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.current_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.current_holder == null
|
|
? orgChild3.orgChild3Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.current_holder == null
|
|
? orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.current_holder.position,
|
|
profilePosType:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profileOrgShortName.toString(),
|
|
),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
const positionName = [
|
|
...new Set(posMaster.positions.map((x) => x.positionName)),
|
|
];
|
|
const posType = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
const posLevel = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
const posExecutive = [
|
|
...new Set(
|
|
posMaster.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
let positionMasterProfileOld: any = null;
|
|
if (posMaster.current_holder != null) {
|
|
positionMasterProfileOld = posMaster.current_holder.current_holders.find(
|
|
(x) => x.orgRevisionId == orgRevisionActive.id,
|
|
);
|
|
}
|
|
|
|
let positionMasterOld: any = null;
|
|
let profilePositionName: any = [];
|
|
let profilePosType: any = [];
|
|
let profilePosLevel: any = [];
|
|
let profilePosExecutive: any = [];
|
|
if (posMaster.ancestorDNA != null && posMaster.ancestorDNA != "") {
|
|
positionMasterOld = orgRevisionActive.posMasters.find(
|
|
(x: any) =>
|
|
x.orgRevisionId == orgRevisionActive.id &&
|
|
x.ancestorDNA == posMaster.ancestorDNA,
|
|
);
|
|
profilePositionName = [
|
|
...new Set(positionMasterOld.positions.map((x: any) => x.positionName)),
|
|
];
|
|
profilePosType = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posType != null)
|
|
.map((x: any) => x.posType.posTypeName),
|
|
),
|
|
];
|
|
profilePosLevel = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posLevel != null)
|
|
.map((x: any) => x.posLevel.posLevelName),
|
|
),
|
|
];
|
|
profilePosExecutive = [
|
|
...new Set(
|
|
positionMasterOld.positions
|
|
.filter((x: any) => x.posExecutive != null)
|
|
.map((x: any) => x.posExecutive.posExecutiveName),
|
|
),
|
|
];
|
|
}
|
|
let education: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileEducations != null &&
|
|
posMaster.current_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.current_holder.profileEducations
|
|
.filter((x) => x.isEducation == true || x.isUse == true)
|
|
.sort((a, b) => {
|
|
if (a.isEducation !== b.isEducation) {
|
|
return a.isEducation ? -1 : 1;
|
|
}
|
|
return b.level - a.level;
|
|
});
|
|
if (_education.length > 0) {
|
|
education = _education.map((e: any) => e.degree).join(", ");
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.current_holder != null &&
|
|
posMaster.current_holder.profileSalary != null &&
|
|
posMaster.current_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.current_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
posMasterOrder: posMaster.posMasterOrder, //
|
|
isSit: posMaster.isSit, //
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.current_holder == null
|
|
? positionName.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.current_holder.position,
|
|
posType:
|
|
posMaster.current_holder == null
|
|
? posType.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
posLevel:
|
|
posMaster.current_holder == null
|
|
? posLevel.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
posExecutive:
|
|
posMaster.current_holder == null
|
|
? posExecutive.join(" หรือ ")
|
|
: posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
|
|
profileOrgName:
|
|
posMaster.current_holder == null
|
|
? orgChild4.orgChild4Name
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4Name
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3Name
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2Name
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1Name
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootName
|
|
: "-",
|
|
profileOrgShortName:
|
|
posMaster.current_holder == null
|
|
? orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.orgChild4 != null
|
|
? positionMasterProfileOld.orgChild4.orgChild4ShortName
|
|
: positionMasterProfileOld.orgChild3 != null
|
|
? positionMasterProfileOld.orgChild3.orgChild3ShortName
|
|
: positionMasterProfileOld.orgChild2 != null
|
|
? positionMasterProfileOld.orgChild2.orgChild2ShortName
|
|
: positionMasterProfileOld.orgChild1 != null
|
|
? positionMasterProfileOld.orgChild1.orgChild1ShortName
|
|
: positionMasterProfileOld.orgRoot != null
|
|
? positionMasterProfileOld.orgRoot.orgRootShortName
|
|
: "-",
|
|
profileFullname:
|
|
posMaster.current_holder == null
|
|
? "- ว่าง -"
|
|
: `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`,
|
|
profilePosMasterNo:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? "-"
|
|
: positionMasterOld.posMasterNo
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.posMasterNo,
|
|
profilePositionName:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? positionName.join(" หรือ ")
|
|
: profilePositionName.join(" หรือ ")
|
|
: posMaster.current_holder.position,
|
|
profilePosType:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posType.join(" หรือ ")
|
|
: profilePosType.join(" หรือ ")
|
|
: posMaster.current_holder.posType == null
|
|
? "-"
|
|
: posMaster.current_holder.posType.posTypeName,
|
|
profilePosLevel:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posLevel.join(" หรือ ")
|
|
: profilePosLevel.join(" หรือ ")
|
|
: posMaster.current_holder.posLevel == null
|
|
? "-"
|
|
: posMaster.current_holder.posLevel.posLevelName,
|
|
profilePosExecutive:
|
|
posMaster.current_holder == null
|
|
? positionMasterOld == null
|
|
? posExecutive.join(" หรือ ")
|
|
: profilePosExecutive.join(" หรือ ")
|
|
: positionMasterProfileOld == null
|
|
? "-"
|
|
: positionMasterProfileOld.positions.find(
|
|
(x: any) => x.positionIsSelected == true,
|
|
)?.posExecutive?.posExecutiveName,
|
|
education: education == "" ? "" : education,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
reason: posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: Extension.ToThaiNumber(node.profileOrgName.toString()),
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profileOrgShortName.toString(),
|
|
),
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName ||
|
|
node.profileOrgShortName != _node.profileOrgShortName ||
|
|
node.profileOrgName != _node.profileOrgName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname:
|
|
node.profileOrgName == _node.profileOrgName ? "" : node.profileOrgName,
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
profilePosMasterNo:
|
|
node.profileOrgShortName == _node.profileOrgShortName
|
|
? ""
|
|
: node.profileOrgShortName,
|
|
profilePosExecutive: "",
|
|
profilePositionName: "",
|
|
profilePosType: "",
|
|
profilePosLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posExecutive.toString()),
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
profilePosMasterNo: Extension.ToThaiNumber(
|
|
node.profilePosMasterNo.toString(),
|
|
),
|
|
profilePosExecutive:
|
|
node.profilePosExecutive == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosExecutive.toString()),
|
|
profilePositionName:
|
|
node.profilePositionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePositionName.toString()),
|
|
profilePosType:
|
|
node.profilePosType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosType.toString()),
|
|
profilePosLevel:
|
|
node.profilePosLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profilePosLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}),
|
|
);
|
|
_node = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return new HttpSuccess({
|
|
template: "report2",
|
|
reportName: "report2",
|
|
data: {
|
|
rootName: orgRootData.length > 0 ? orgRootData[0].orgRootName : "-",
|
|
data: data,
|
|
},
|
|
});
|
|
}
|
|
/**
|
|
* API Report3
|
|
*
|
|
* @summary Report3
|
|
*
|
|
*/
|
|
@Post("report3")
|
|
async NewReport3(
|
|
@Body()
|
|
reqBody: {
|
|
node: number;
|
|
nodeId: string;
|
|
},
|
|
) {
|
|
// @Get("report3/{rootId}")
|
|
// async findReport3(@Path() rootId: string) {
|
|
// const orgRevision = await this.orgRevisionRepository.findOne({
|
|
// where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false },
|
|
// relations: ["orgRoots"],
|
|
// });
|
|
// if (!orgRevision) {
|
|
// throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
// }
|
|
let nodeId: string = reqBody.nodeId ? reqBody.nodeId : "";
|
|
let node: number = reqBody.node ? reqBody.node : 0;
|
|
if (nodeId === "" || node < 0 || node > 4) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
// ดึงแค่ rootId ก่อน ถ้าลูกค้า confirm ค่อยปรับ
|
|
switch (node) {
|
|
case 0: {
|
|
const orgRoot = await this.orgRootRepository.findOne({
|
|
select: ["id"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgRoot.id;
|
|
break;
|
|
}
|
|
case 1: {
|
|
const orgChild1 = await this.child1Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild1.orgRootId;
|
|
break;
|
|
}
|
|
case 2: {
|
|
const orgChild2 = await this.child2Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild2.orgRootId;
|
|
break;
|
|
}
|
|
case 3: {
|
|
const orgChild3 = await this.child3Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild3.orgRootId;
|
|
break;
|
|
}
|
|
case 4: {
|
|
const orgChild4 = await this.child4Repository.findOne({
|
|
select: ["id", "orgRootId"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
nodeId = orgChild4.orgRootId;
|
|
break;
|
|
}
|
|
default:
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
// Step 1: ดึงข้อมูล OrgRoot พื้นฐาน
|
|
const orgRootData = await this.orgRootRepository
|
|
.createQueryBuilder("orgRoot")
|
|
.select([
|
|
"orgRoot.id",
|
|
"orgRoot.orgRootName",
|
|
"orgRoot.orgRootShortName",
|
|
"orgRoot.orgRootOrder",
|
|
])
|
|
.where("orgRoot.id = :nodeId", { nodeId })
|
|
.orderBy("orgRoot.orgRootOrder", "ASC")
|
|
.getMany();
|
|
|
|
if (!orgRootData || orgRootData.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร");
|
|
}
|
|
|
|
// Step 2: ดึงข้อมูล PosMasters ที่เกี่ยวข้องเท่านั้น
|
|
const posMastersData = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgRootId",
|
|
"posMaster.orgChild1Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgRootId = :nodeId", { nodeId })
|
|
.andWhere("posMaster.orgChild1Id IS NULL") // เฉพาะ root level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
|
|
// Step 3: ดึงข้อมูล Profiles ที่ใช้จริงเท่านั้น
|
|
const profileIds = [
|
|
...new Set([
|
|
...posMastersData.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...posMastersData.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
];
|
|
|
|
let profilesData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
profilesData = await this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
])
|
|
.where("profile.id IN (:...profileIds)", { profileIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Step 4: ดึงข้อมูล Education ล่าสุดของแต่ละ Profile
|
|
let educationsData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
educationsData = await this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...profileIds)", { profileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MIN(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...profileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ profileIds },
|
|
)
|
|
.getMany();
|
|
}
|
|
|
|
// Step 5: ดึงข้อมูล Salary ล่าสุดของแต่ละ Profile
|
|
let salariesData: any[] = [];
|
|
if (profileIds.length > 0) {
|
|
salariesData = await this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select([
|
|
"ps.profileId",
|
|
"ps.commandDateAffect",
|
|
"ps.amount",
|
|
"ps.positionSalaryAmount",
|
|
"ps.mouthSalaryAmount",
|
|
])
|
|
.where("ps.profileId IN (:...profileIds)", { profileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...profileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ profileIds },
|
|
)
|
|
.getMany();
|
|
}
|
|
|
|
// Step 6: ดึงข้อมูล Positions ที่เกี่ยวข้อง
|
|
const posMasterIds = posMastersData.map((pm: any) => pm.id);
|
|
let positionsData: any[] = [];
|
|
if (posMasterIds.length > 0) {
|
|
positionsData = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...posMasterIds)", { posMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Step 7: Combine ข้อมูลกลับเหมือนเดิม
|
|
for (let orgRoot of orgRootData) {
|
|
orgRoot.posMasters = posMastersData.filter((pm: any) => pm.orgRootId === orgRoot.id);
|
|
|
|
for (let posMaster of orgRoot.posMasters) {
|
|
// Attach current_holder
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = profilesData.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = educationsData.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = salariesData.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Attach next_holder
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = profilesData.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = educationsData.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = salariesData.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Attach positions
|
|
posMaster.positions = positionsData.filter((pos: any) => pos.posMasterId === posMaster.id);
|
|
}
|
|
}
|
|
|
|
if (!orgRootData || orgRootData.length === 0) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลองค์กร");
|
|
}
|
|
|
|
const orgName = orgRootData[0].orgRootName ?? "";
|
|
const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null;
|
|
|
|
// Step 8: ปรับปรุง orgChild1Data - ใช้ optimized approach
|
|
const orgChild1Data = await this.child1Repository
|
|
.createQueryBuilder("orgChild1")
|
|
.select([
|
|
"orgChild1.id",
|
|
"orgChild1.orgRootId",
|
|
"orgChild1.orgChild1Name",
|
|
"orgChild1.orgChild1ShortName",
|
|
"orgChild1.orgChild1Order",
|
|
])
|
|
.where("orgChild1.orgRootId IN (:...orgRootIds)", { orgRootIds })
|
|
.orderBy("orgChild1.orgChild1Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild1
|
|
const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id);
|
|
let child1PosMasters: any[] = [];
|
|
if (orgChild1Ids.length > 0) {
|
|
child1PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild1Id",
|
|
"posMaster.orgChild2Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild1Id IN (:...orgChild1Ids)", { orgChild1Ids })
|
|
.andWhere("posMaster.orgChild2Id IS NULL") // เฉพาะ child1 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child1
|
|
const child1ProfileIds =
|
|
child1PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child1PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child1PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child1
|
|
let child1Profiles: any[] = [];
|
|
let child1Educations: any[] = [];
|
|
let child1Salaries: any[] = [];
|
|
let child1Positions: any[] = [];
|
|
|
|
if (child1ProfileIds.length > 0) {
|
|
[child1Profiles, child1Educations, child1Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MIN(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child1ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child1ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select([
|
|
"ps.profileId",
|
|
"ps.commandDateAffect",
|
|
"ps.amount",
|
|
"ps.positionSalaryAmount",
|
|
"ps.mouthSalaryAmount",
|
|
])
|
|
.where("ps.profileId IN (:...child1ProfileIds)", { child1ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child1ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child1ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child1PosMasters.length > 0) {
|
|
const child1PosMasterIds = child1PosMasters.map((pm: any) => pm.id);
|
|
child1Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child1PosMasterIds)", { child1PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild1
|
|
for (let orgChild1 of orgChild1Data) {
|
|
orgChild1.posMasters = child1PosMasters.filter((pm: any) => pm.orgChild1Id === orgChild1.id);
|
|
|
|
for (let posMaster of orgChild1.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child1Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child1Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child1Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child1Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child1Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child1Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child1Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 9: ปรับปรุง orgChild2Data
|
|
const originalOrgChild1Ids =
|
|
orgChild1Data.length > 0 ? orgChild1Data.map((orgChild1) => orgChild1.id) : [];
|
|
const orgChild2Data = await this.child2Repository
|
|
.createQueryBuilder("orgChild2")
|
|
.select([
|
|
"orgChild2.id",
|
|
"orgChild2.orgChild1Id",
|
|
"orgChild2.orgChild2Name",
|
|
"orgChild2.orgChild2ShortName",
|
|
"orgChild2.orgChild2Order",
|
|
])
|
|
.where(
|
|
originalOrgChild1Ids.length > 0
|
|
? "orgChild2.orgChild1Id IN (:...originalOrgChild1Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild1Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild2.orgChild2Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild2
|
|
const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id);
|
|
let child2PosMasters: any[] = [];
|
|
if (orgChild2Ids.length > 0) {
|
|
child2PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild2Id",
|
|
"posMaster.orgChild3Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild2Id IN (:...orgChild2Ids)", { orgChild2Ids })
|
|
.andWhere("posMaster.orgChild3Id IS NULL") // เฉพาะ child2 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child2
|
|
const child2ProfileIds =
|
|
child2PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child2PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child2PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child2
|
|
let child2Profiles: any[] = [];
|
|
let child2Educations: any[] = [];
|
|
let child2Salaries: any[] = [];
|
|
let child2Positions: any[] = [];
|
|
|
|
if (child2ProfileIds.length > 0) {
|
|
[child2Profiles, child2Educations, child2Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MIN(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child2ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child2ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select([
|
|
"ps.profileId",
|
|
"ps.commandDateAffect",
|
|
"ps.amount",
|
|
"ps.positionSalaryAmount",
|
|
"ps.mouthSalaryAmount",
|
|
])
|
|
.where("ps.profileId IN (:...child2ProfileIds)", { child2ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child2ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child2ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child2PosMasters.length > 0) {
|
|
const child2PosMasterIds = child2PosMasters.map((pm: any) => pm.id);
|
|
child2Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child2PosMasterIds)", { child2PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild2
|
|
for (let orgChild2 of orgChild2Data) {
|
|
orgChild2.posMasters = child2PosMasters.filter((pm: any) => pm.orgChild2Id === orgChild2.id);
|
|
|
|
for (let posMaster of orgChild2.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child2Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child2Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child2Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child2Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child2Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child2Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child2Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 10: ปรับปรุง orgChild3Data
|
|
const originalOrgChild2Ids =
|
|
orgChild2Data.length > 0 ? orgChild2Data.map((orgChild2) => orgChild2.id) : [];
|
|
const orgChild3Data = await this.child3Repository
|
|
.createQueryBuilder("orgChild3")
|
|
.select([
|
|
"orgChild3.id",
|
|
"orgChild3.orgChild2Id",
|
|
"orgChild3.orgChild3Name",
|
|
"orgChild3.orgChild3ShortName",
|
|
"orgChild3.orgChild3Order",
|
|
])
|
|
.where(
|
|
originalOrgChild2Ids.length > 0
|
|
? "orgChild3.orgChild2Id IN (:...originalOrgChild2Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild2Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild3.orgChild3Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild3
|
|
const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id);
|
|
let child3PosMasters: any[] = [];
|
|
if (orgChild3Ids.length > 0) {
|
|
child3PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild2Id",
|
|
"posMaster.orgChild3Id",
|
|
"posMaster.orgChild4Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild3Id IN (:...orgChild3Ids)", { orgChild3Ids })
|
|
.andWhere("posMaster.orgChild4Id IS NULL") // เฉพาะ child3 level
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child3
|
|
const child3ProfileIds =
|
|
child3PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child3PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child3PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child3
|
|
let child3Profiles: any[] = [];
|
|
let child3Educations: any[] = [];
|
|
let child3Salaries: any[] = [];
|
|
let child3Positions: any[] = [];
|
|
|
|
if (child3ProfileIds.length > 0) {
|
|
[child3Profiles, child3Educations, child3Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MIN(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child3ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child3ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select([
|
|
"ps.profileId",
|
|
"ps.commandDateAffect",
|
|
"ps.amount",
|
|
"ps.positionSalaryAmount",
|
|
"ps.mouthSalaryAmount",
|
|
])
|
|
.where("ps.profileId IN (:...child3ProfileIds)", { child3ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child3ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child3ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
console.log("2");
|
|
|
|
if (child3PosMasters.length > 0) {
|
|
const child3PosMasterIds = child3PosMasters.map((pm: any) => pm.id);
|
|
child3Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child3PosMasterIds)", { child3PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild3
|
|
for (let orgChild3 of orgChild3Data) {
|
|
orgChild3.posMasters = child3PosMasters.filter((pm: any) => pm.orgChild3Id === orgChild3.id);
|
|
|
|
for (let posMaster of orgChild3.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child3Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child3Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child3Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child3Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child3Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child3Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child3Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Step 11: ปรับปรุง orgChild4Data
|
|
const originalOrgChild3Ids =
|
|
orgChild3Data.length > 0 ? orgChild3Data.map((orgChild3) => orgChild3.id) : [];
|
|
const orgChild4Data = await this.child4Repository
|
|
.createQueryBuilder("orgChild4")
|
|
.select([
|
|
"orgChild4.id",
|
|
"orgChild4.orgChild3Id",
|
|
"orgChild4.orgChild4Name",
|
|
"orgChild4.orgChild4ShortName",
|
|
"orgChild4.orgChild4Order",
|
|
])
|
|
.where(
|
|
originalOrgChild3Ids.length > 0
|
|
? "orgChild4.orgChild3Id IN (:...originalOrgChild3Ids)"
|
|
: "1=0",
|
|
{
|
|
originalOrgChild3Ids,
|
|
},
|
|
)
|
|
.orderBy("orgChild4.orgChild4Order", "ASC")
|
|
.getMany();
|
|
|
|
// ดึงข้อมูล PosMasters สำหรับ orgChild4
|
|
const orgChild4Ids = orgChild4Data.map((orgChild4) => orgChild4.id);
|
|
let child4PosMasters: any[] = [];
|
|
if (orgChild4Ids.length > 0) {
|
|
child4PosMasters = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.select([
|
|
"posMaster.id",
|
|
"posMaster.posMasterOrder",
|
|
"posMaster.isSit",
|
|
"posMaster.posMasterNo",
|
|
"posMaster.ancestorDNA",
|
|
"posMaster.reason",
|
|
"posMaster.orgChild3Id",
|
|
"posMaster.orgChild4Id",
|
|
"posMaster.current_holderId",
|
|
"posMaster.next_holderId",
|
|
])
|
|
.where("posMaster.orgChild4Id IN (:...orgChild4Ids)", { orgChild4Ids })
|
|
.orderBy("posMaster.posMasterOrder", "ASC")
|
|
.addOrderBy("posMaster.posMasterCreatedAt", "ASC")
|
|
.getMany();
|
|
}
|
|
|
|
// รวบรวม Profile IDs สำหรับ child4
|
|
const child4ProfileIds =
|
|
child4PosMasters.length > 0
|
|
? [
|
|
...new Set([
|
|
...child4PosMasters.map((pm: any) => pm.current_holderId).filter(Boolean),
|
|
...child4PosMasters.map((pm: any) => pm.next_holderId).filter(Boolean),
|
|
]),
|
|
]
|
|
: [];
|
|
|
|
// ดึงข้อมูล Profiles, Education, Salary, Positions สำหรับ child4
|
|
let child4Profiles: any[] = [];
|
|
let child4Educations: any[] = [];
|
|
let child4Salaries: any[] = [];
|
|
let child4Positions: any[] = [];
|
|
|
|
if (child4ProfileIds.length > 0) {
|
|
[child4Profiles, child4Educations, child4Salaries] = await Promise.all([
|
|
this.profileRepository
|
|
.createQueryBuilder("profile")
|
|
.select([
|
|
"profile.id",
|
|
"profile.prefix",
|
|
"profile.firstName",
|
|
"profile.lastName",
|
|
"profile.position",
|
|
"profile.posTypeId",
|
|
"profile.posLevelId",
|
|
])
|
|
.where("profile.id IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.getMany(),
|
|
|
|
this.profileEducationRepository
|
|
.createQueryBuilder("pe")
|
|
.select(["pe.profileId", "pe.finishDate", "pe.degree", "pe.level", "pe.isDeleted"])
|
|
.where("pe.profileId IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.andWhere("pe.isDeleted = :isDeleted", { isDeleted: false })
|
|
.andWhere(
|
|
`(pe.profileId, COALESCE(pe.finishDate, '1900-01-01'), pe.level) IN (
|
|
SELECT pe2.profileId,
|
|
COALESCE(MAX(pe2.finishDate), '1900-01-01'),
|
|
CASE
|
|
WHEN MAX(pe2.finishDate) IS NOT NULL THEN
|
|
(SELECT pe3.level FROM profileEducation pe3
|
|
WHERE pe3.profileId = pe2.profileId
|
|
AND pe3.finishDate = MAX(pe2.finishDate) LIMIT 1)
|
|
ELSE MIN(pe2.level)
|
|
END
|
|
FROM profileEducation pe2
|
|
WHERE pe2.profileId IN (:...child4ProfileIds)
|
|
GROUP BY pe2.profileId
|
|
)`,
|
|
{ child4ProfileIds },
|
|
)
|
|
.getMany(),
|
|
|
|
this.profileSalaryRepository
|
|
.createQueryBuilder("ps")
|
|
.select([
|
|
"ps.profileId",
|
|
"ps.commandDateAffect",
|
|
"ps.amount",
|
|
"ps.positionSalaryAmount",
|
|
"ps.mouthSalaryAmount",
|
|
])
|
|
.where("ps.profileId IN (:...child4ProfileIds)", { child4ProfileIds })
|
|
.andWhere(
|
|
`(ps.profileId, ps.commandDateAffect) IN (
|
|
SELECT ps2.profileId, MAX(ps2.commandDateAffect)
|
|
FROM profileSalary ps2
|
|
WHERE ps2.profileId IN (:...child4ProfileIds)
|
|
GROUP BY ps2.profileId
|
|
)`,
|
|
{ child4ProfileIds },
|
|
)
|
|
.getMany(),
|
|
]);
|
|
}
|
|
|
|
if (child4PosMasters.length > 0) {
|
|
const child4PosMasterIds = child4PosMasters.map((pm: any) => pm.id);
|
|
child4Positions = await this.positionRepository
|
|
.createQueryBuilder("position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.leftJoinAndSelect("position.posExecutive", "posExecutive")
|
|
.select([
|
|
"position.id",
|
|
"position.positionName",
|
|
"position.positionIsSelected",
|
|
"position.posMasterId",
|
|
"posType.id",
|
|
"posType.posTypeName",
|
|
"posLevel.id",
|
|
"posLevel.posLevelName",
|
|
"posExecutive.id",
|
|
"posExecutive.posExecutiveName",
|
|
])
|
|
.where("position.posMasterId IN (:...child4PosMasterIds)", { child4PosMasterIds })
|
|
.getMany();
|
|
}
|
|
|
|
// Combine ข้อมูล orgChild4
|
|
for (let orgChild4 of orgChild4Data) {
|
|
orgChild4.posMasters = child4PosMasters.filter((pm: any) => pm.orgChild4Id === orgChild4.id);
|
|
|
|
for (let posMaster of orgChild4.posMasters) {
|
|
if (posMaster.current_holderId) {
|
|
posMaster.current_holder = child4Profiles.find(
|
|
(p: any) => p.id === posMaster.current_holderId,
|
|
);
|
|
if (posMaster.current_holder) {
|
|
posMaster.current_holder.profileEducations = child4Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.current_holderId,
|
|
);
|
|
posMaster.current_holder.profileSalary = child4Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.current_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
if (posMaster.next_holderId) {
|
|
posMaster.next_holder = child4Profiles.find((p: any) => p.id === posMaster.next_holderId);
|
|
if (posMaster.next_holder) {
|
|
posMaster.next_holder.profileEducations = child4Educations.filter(
|
|
(ed: any) => ed.profileId === posMaster.next_holderId,
|
|
);
|
|
posMaster.next_holder.profileSalary = child4Salaries.filter(
|
|
(sal: any) => sal.profileId === posMaster.next_holderId,
|
|
);
|
|
}
|
|
}
|
|
|
|
posMaster.positions = child4Positions.filter(
|
|
(pos: any) => pos.posMasterId === posMaster.id,
|
|
);
|
|
}
|
|
}
|
|
|
|
let orgRevisionActive: any = await this.orgRevisionRepository.findOne({
|
|
where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false },
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (orgRevisionActive == null) {
|
|
const _orgRevisionActive = await this.orgRevisionRepository.find({
|
|
order: { createdAt: "DESC" },
|
|
skip: 1,
|
|
relations: [
|
|
"posMasters",
|
|
"posMasters.positions",
|
|
"posMasters.positions.posLevel",
|
|
"posMasters.positions.posType",
|
|
"posMasters.positions.posExecutive",
|
|
],
|
|
});
|
|
if (_orgRevisionActive.length > 0) orgRevisionActive = _orgRevisionActive[0];
|
|
}
|
|
|
|
let data = new Array();
|
|
let _node: any;
|
|
let no = 1;
|
|
for (let orgRoot of orgRootData) {
|
|
await Promise.all(
|
|
orgRoot.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild1Id == null && posMaster.next_holder != null) {
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
orgTreeName: orgRoot.orgRootName,
|
|
orgTreeShortName: orgRoot.orgRootShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: "-",
|
|
posLevel:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: "-",
|
|
posExecutive:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: "-",
|
|
|
|
profileFullname: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
positionSalaryAmount: salary == "" ? "" : salary.positionSalaryAmount,
|
|
mouthSalaryAmount: salary == "" ? "" : salary.mouthSalaryAmount,
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: "",
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive == undefined ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName ? "" : node.orgTreeShortName,
|
|
profileFullname: "",
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive == _node.posExecutive ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null ? "" : Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason: node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
console.log("13");
|
|
for (let orgChild1 of orgChild1Data.filter(
|
|
(orgChild1) => orgChild1.orgRootId === orgRoot.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild1.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild2Id == null && posMaster.next_holder != null) {
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
console.log("14");
|
|
let node = {
|
|
orgTreeName: orgChild1.orgChild1Name,
|
|
orgTreeShortName: orgChild1.orgChild1ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posType
|
|
?.posTypeName
|
|
: "-",
|
|
posLevel:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)?.posLevel
|
|
?.posLevelName
|
|
: "-",
|
|
posExecutive:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: "-",
|
|
|
|
profileFullname: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
positionSalaryAmount: salary == "" ? "" : salary.positionSalaryAmount,
|
|
mouthSalaryAmount: salary == "" ? "" : salary.mouthSalaryAmount,
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: "",
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname: "",
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive == _node.posExecutive ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null ? "" : Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary ? Extension.ToThaiNumber(node.salary.toLocaleString()) : "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
console.log("15");
|
|
for (let orgChild2 of orgChild2Data.filter(
|
|
(orgChild2) => orgChild2.orgChild1Id === orgChild1.id,
|
|
)) {
|
|
console.log("111");
|
|
await Promise.all(
|
|
orgChild2.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
console.log("112");
|
|
if (posMaster.orgChild3Id == null && posMaster.next_holder != null) {
|
|
console.log("114");
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
console.log("115");
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
console.log("116");
|
|
|
|
let node = {
|
|
orgTreeName: orgChild2.orgChild2Name,
|
|
orgTreeShortName: orgChild2.orgChild2ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: "-",
|
|
posLevel:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: "-",
|
|
posExecutive:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: "-",
|
|
profileFullname: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
positionSalaryAmount: salary == "" ? "" : salary.positionSalaryAmount,
|
|
mouthSalaryAmount: salary == "" ? "" : salary.mouthSalaryAmount,
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: "",
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname: "",
|
|
posExecutive: node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == _node.posExecutive ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null ? "" : Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
console.log("16");
|
|
for (let orgChild3 of orgChild3Data.filter(
|
|
(orgChild3) => orgChild3.orgChild2Id === orgChild2.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild3.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.orgChild4Id == null && posMaster.next_holder != null) {
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
(b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
orgTreeName: orgChild3.orgChild3Name,
|
|
orgTreeShortName: orgChild3.orgChild3ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: "-",
|
|
posLevel:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: "-",
|
|
posExecutive:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: "-",
|
|
profileFullname: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
positionSalaryAmount: salary == "" ? "" : salary.positionSalaryAmount,
|
|
mouthSalaryAmount: salary == "" ? "" : salary.mouthSalaryAmount,
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: "",
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname: "",
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == _node.posExecutive ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null ? "" : Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
|
|
console.log("17");
|
|
for (let orgChild4 of orgChild4Data.filter(
|
|
(orgChild4) => orgChild4.orgChild3Id === orgChild3.id,
|
|
)) {
|
|
await Promise.all(
|
|
orgChild4.posMasters
|
|
.sort((a, b) => a.posMasterOrder - b.posMasterOrder)
|
|
.map(async (posMaster) => {
|
|
if (posMaster.next_holder != null) {
|
|
let education: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileEducations != null &&
|
|
posMaster.next_holder.profileEducations.length > 0
|
|
) {
|
|
let _education: any = posMaster.next_holder.profileEducations.sort(
|
|
(a, b) =>
|
|
b.finishDate == null
|
|
? 0
|
|
: (b.finishDate == null ? 0 : b.finishDate.getTime()) -
|
|
(a.finishDate == null ? 0 : a.finishDate.getTime()),
|
|
);
|
|
if (_education.length > 0) {
|
|
education = _education[0];
|
|
}
|
|
}
|
|
let salary: any = "";
|
|
if (
|
|
posMaster.next_holder != null &&
|
|
posMaster.next_holder.profileSalary != null &&
|
|
posMaster.next_holder.profileSalary.length > 0
|
|
) {
|
|
let _salary: any = posMaster.next_holder.profileSalary.sort(
|
|
(a, b) =>
|
|
(b.commandDateAffect == null ? 0 : b.commandDateAffect.getTime()) -
|
|
(a.commandDateAffect == null ? 0 : a.commandDateAffect.getTime()),
|
|
);
|
|
if (_salary.length > 0) {
|
|
salary = _salary[0];
|
|
}
|
|
}
|
|
|
|
let node = {
|
|
orgTreeName: orgChild4.orgChild4Name,
|
|
orgTreeShortName: orgChild4.orgChild4ShortName,
|
|
posMasterNo: posMaster.posMasterNo,
|
|
positionName:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.positionName
|
|
: posMaster.next_holder.position,
|
|
posType:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posType?.posTypeName
|
|
: "-",
|
|
posLevel:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posLevel?.posLevelName
|
|
: "-",
|
|
posExecutive:
|
|
posMaster.isSit == false
|
|
? posMaster.positions.find((x: any) => x.positionIsSelected == true)
|
|
?.posExecutive?.posExecutiveName
|
|
: "-",
|
|
profileFullname: `${posMaster.next_holder.prefix}${posMaster.next_holder.firstName} ${posMaster.next_holder.lastName}`,
|
|
education: education == "" ? "" : education.degree,
|
|
salary: salary == "" ? "" : salary.amount,
|
|
positionSalaryAmount: salary == "" ? "" : salary.positionSalaryAmount,
|
|
mouthSalaryAmount: salary == "" ? "" : salary.mouthSalaryAmount,
|
|
reason: posMaster.reason == null ? "" : posMaster.reason,
|
|
};
|
|
if (_node == null) {
|
|
const head = {
|
|
posMasterNo: Extension.ToThaiNumber(node.orgTreeShortName.toString()),
|
|
profileFullname: "",
|
|
posExecutive: Extension.ToThaiNumber(node.orgTreeName.toString()),
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
const _head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive: node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(_head);
|
|
} else {
|
|
if (
|
|
node.orgTreeShortName != _node.orgTreeShortName ||
|
|
node.orgTreeName != _node.orgTreeName
|
|
) {
|
|
const head = {
|
|
posMasterNo:
|
|
node.orgTreeShortName == _node.orgTreeShortName
|
|
? ""
|
|
: node.orgTreeShortName,
|
|
profileFullname: "",
|
|
posExecutive:
|
|
node.orgTreeName == _node.orgTreeName ? "" : node.orgTreeName,
|
|
positionName: "",
|
|
posType: "",
|
|
posLevel: "",
|
|
education: "",
|
|
salary: "",
|
|
positionSalaryAmount: "",
|
|
mouthSalaryAmount: "",
|
|
reason: "",
|
|
};
|
|
data.push(head);
|
|
_node == null;
|
|
}
|
|
const head = {
|
|
no: Extension.ToThaiNumber(no.toString()),
|
|
posMasterNo:
|
|
node.posMasterNo == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posMasterNo.toString()),
|
|
profileFullname:
|
|
node.profileFullname == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.profileFullname.toString()),
|
|
posExecutive:
|
|
node.posExecutive == _node.posExecutive ? "" : node.posExecutive,
|
|
positionName:
|
|
node.positionName == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.positionName.toString()),
|
|
posType:
|
|
node.posType == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posType.toString()),
|
|
posLevel:
|
|
node.posLevel == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.posLevel.toString()),
|
|
education:
|
|
node.education == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.education.toString()),
|
|
salary: node.salary
|
|
? Extension.ToThaiNumber(node.salary.toLocaleString())
|
|
: "",
|
|
positionSalaryAmount: node.positionSalaryAmount
|
|
? Extension.ToThaiNumber(node.positionSalaryAmount.toLocaleString())
|
|
: "",
|
|
mouthSalaryAmount: node.mouthSalaryAmount
|
|
? Extension.ToThaiNumber(node.mouthSalaryAmount.toLocaleString())
|
|
: "",
|
|
reason:
|
|
node.reason == null
|
|
? ""
|
|
: Extension.ToThaiNumber(node.reason.toString()),
|
|
};
|
|
data.push(head);
|
|
}
|
|
no += 1;
|
|
_node = node;
|
|
}
|
|
}),
|
|
);
|
|
_node = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return new HttpSuccess({
|
|
template: "report3",
|
|
reportName: "report3",
|
|
data: { org: orgName, data },
|
|
});
|
|
}
|
|
|
|
@Post("report4")
|
|
async NewReport4(
|
|
@Body()
|
|
reqBody: {
|
|
node: number;
|
|
nodeId: string;
|
|
},
|
|
) {
|
|
// @Get("report4/{rootId}")
|
|
// async findReport4(@Path() rootId: string) {
|
|
|
|
let nodeId: string = reqBody.nodeId ? reqBody.nodeId : "";
|
|
let node: number = reqBody.node ? reqBody.node : 0;
|
|
let rootName: string = "";
|
|
let whereCase: string = "";
|
|
let params: any = {};
|
|
|
|
if (nodeId === "" || node < 0 || node > 4) {
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
switch (node) {
|
|
case 0: {
|
|
const orgRoot = await this.orgRootRepository.findOne({
|
|
select: ["id", "orgRootName"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgRoot) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
rootName = orgRoot.orgRootName;
|
|
whereCase = "posMaster.orgRootId = :nodeId";
|
|
params = { nodeId };
|
|
break;
|
|
}
|
|
case 1: {
|
|
const orgChild1 = await this.child1Repository.findOne({
|
|
select: ["id", "orgChild1Name"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild1) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
rootName = orgChild1.orgChild1Name;
|
|
whereCase = "posMaster.orgChild1Id = :nodeId";
|
|
params = { nodeId };
|
|
break;
|
|
}
|
|
case 2: {
|
|
const orgChild2 = await this.child2Repository.findOne({
|
|
select: ["id", "orgChild2Name"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild2) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
rootName = orgChild2.orgChild2Name;
|
|
whereCase = "posMaster.orgChild2Id = :nodeId";
|
|
params = { nodeId };
|
|
break;
|
|
}
|
|
case 3: {
|
|
const orgChild3 = await this.child3Repository.findOne({
|
|
select: ["id", "orgChild3Name"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild3) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
rootName = orgChild3.orgChild3Name;
|
|
whereCase = "posMaster.orgChild3Id = :nodeId";
|
|
params = { nodeId };
|
|
break;
|
|
}
|
|
case 4: {
|
|
const orgChild4 = await this.child4Repository.findOne({
|
|
select: ["id", "orgChild4Name"],
|
|
where: { id: nodeId },
|
|
});
|
|
if (!orgChild4) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
rootName = orgChild4.orgChild4Name;
|
|
whereCase = "posMaster.orgChild4Id = :nodeId";
|
|
params = { nodeId };
|
|
break;
|
|
}
|
|
default:
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
}
|
|
|
|
// const orgRootData = await this.orgRootRepository.findOne({
|
|
// where: { id: reqBody.nodeId },
|
|
// });
|
|
// if (!orgRootData) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
// let rootId:string = reqBody.nodeId;
|
|
const posMaster = await this.posMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.leftJoinAndSelect("posMaster.positions", "position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
// .where("posMaster.orgRootId = :rootId", { rootId })
|
|
.where(whereCase, params)
|
|
.orderBy("posType.posTypeRank", "ASC")
|
|
.addOrderBy("posLevel.posLevelRank", "ASC")
|
|
.getMany();
|
|
|
|
const _posMaster = posMaster.map((x) => ({
|
|
type: [...new Set(x.positions.flatMap((y) => y.posType.posTypeName))].join(","),
|
|
typeRank: [...new Set(x.positions.flatMap((y) => y.posType.posTypeRank))].join(""),
|
|
level: [...new Set(x.positions.flatMap((y) => y.posLevel.posLevelName))].join(","),
|
|
levelRank: [
|
|
...new Set(
|
|
x.positions.flatMap((y) => `${y.posType.posTypeRank}${y.posLevel.posLevelRank}`),
|
|
),
|
|
].join(""),
|
|
positions: [...new Set(x.positions.flatMap((y) => y.positionName))].join(""),
|
|
}));
|
|
|
|
const groupedData = _posMaster.reduce((acc: any, curr: any) => {
|
|
const key = `${curr.type}|${curr.typeRank}|${curr.level}|${curr.levelRank}`;
|
|
if (!acc[key]) {
|
|
acc[key] = { ...curr, total: 1 };
|
|
} else {
|
|
acc[key].total += 1;
|
|
}
|
|
return acc;
|
|
}, {});
|
|
|
|
let result = Object.values(groupedData)
|
|
.map((x: any) => ({
|
|
type: x.type,
|
|
typeRank: parseInt(x.typeRank),
|
|
level: x.level,
|
|
levelRank: parseInt(x.levelRank),
|
|
total: x.total,
|
|
remark: x.positions,
|
|
}))
|
|
.sort((x, y) => {
|
|
if (x.typeRank !== y.typeRank) {
|
|
return x.typeRank - y.typeRank;
|
|
}
|
|
return x.levelRank - y.levelRank;
|
|
});
|
|
let tmpType: string = "";
|
|
let allTotal: number = 0;
|
|
let total: number = 0;
|
|
let _total: number = 0;
|
|
let _reslut = new Array();
|
|
|
|
result.forEach((x: any, idx: number) => {
|
|
allTotal += x.total;
|
|
total += x.total;
|
|
if (x.type === tmpType) {
|
|
_reslut.push({
|
|
...x,
|
|
type: "",
|
|
});
|
|
} else {
|
|
if (x.type !== tmpType && tmpType != "") {
|
|
_total = total - x.total;
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวม",
|
|
levelRank: "",
|
|
total: _total,
|
|
remark: "",
|
|
});
|
|
total = x.total;
|
|
_total = 0;
|
|
}
|
|
_reslut.push({
|
|
...x,
|
|
});
|
|
}
|
|
tmpType = x.type;
|
|
});
|
|
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวม",
|
|
levelRank: "",
|
|
total: total,
|
|
remark: "",
|
|
});
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวมทั้งสิ้น",
|
|
levelRank: "",
|
|
total: allTotal,
|
|
remark: "",
|
|
});
|
|
|
|
return new HttpSuccess({
|
|
template: "report4",
|
|
reportName: "report4",
|
|
data: {
|
|
dateCurrent: Extension.ToThaiShortDate(new Date()),
|
|
rootName: rootName ? rootName : "-",
|
|
data: _reslut,
|
|
},
|
|
});
|
|
}
|
|
|
|
@Get("report4-employee/{rootId}")
|
|
async findReportEmp4(@Path() rootId: string) {
|
|
const orgRootData = await this.orgRootRepository.findOne({
|
|
where: { id: rootId },
|
|
});
|
|
if (!orgRootData) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
|
|
const posMaster = await this.empPosMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.leftJoinAndSelect("posMaster.positions", "position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.where("posMaster.orgRootId = :rootId", { rootId })
|
|
.orderBy("posType.posTypeRank", "ASC")
|
|
.addOrderBy("posLevel.posLevelRank", "ASC")
|
|
.getMany();
|
|
|
|
const _posMaster = posMaster.map((x) => ({
|
|
type: [...new Set(x.positions.flatMap((y) => y.posType.posTypeName))].join(","),
|
|
typeRank: [...new Set(x.positions.flatMap((y) => y.posType.posTypeRank))].join(""),
|
|
level: [...new Set(x.positions.flatMap((y) => y.posLevel.posLevelName))].join(","),
|
|
levelRank: [
|
|
...new Set(
|
|
x.positions.flatMap((y) => `${y.posType.posTypeRank}${y.posLevel.posLevelRank}`),
|
|
),
|
|
].join(""),
|
|
positions: [...new Set(x.positions.flatMap((y) => y.positionName))].join(""),
|
|
}));
|
|
|
|
const groupedData = _posMaster.reduce((acc: any, curr: any) => {
|
|
const key = `${curr.type}|${curr.typeRank}|${curr.level}|${curr.levelRank}`;
|
|
if (!acc[key]) {
|
|
acc[key] = { ...curr, total: 1 };
|
|
} else {
|
|
acc[key].total += 1;
|
|
acc[key].total += 1;
|
|
const combinedPositions = new Set([
|
|
...acc[key].positions.split(", "),
|
|
...curr.positions.split(", "),
|
|
]);
|
|
acc[key].positions = Array.from(combinedPositions).join(", ");
|
|
}
|
|
return acc;
|
|
}, {});
|
|
|
|
let result = Object.values(groupedData)
|
|
.map((x: any) => ({
|
|
type: x.type,
|
|
typeRank: parseInt(x.typeRank),
|
|
level: x.level,
|
|
levelRank: parseInt(x.levelRank),
|
|
|
|
total: x.total,
|
|
remark: x.positions,
|
|
}))
|
|
.sort((x, y) => {
|
|
if (x.typeRank !== y.typeRank) {
|
|
return x.typeRank - y.typeRank;
|
|
}
|
|
return x.levelRank - y.levelRank;
|
|
});
|
|
let tmpType: string = "";
|
|
let allTotal: number = 0;
|
|
let total: number = 0;
|
|
let _total: number = 0;
|
|
let _reslut = new Array();
|
|
|
|
result.forEach((x: any, idx: number) => {
|
|
allTotal += x.total;
|
|
total += x.total;
|
|
if (x.type === tmpType) {
|
|
_reslut.push({
|
|
...x,
|
|
type: "",
|
|
});
|
|
} else {
|
|
if (x.type !== tmpType && tmpType != "") {
|
|
_total = total - x.total;
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวม",
|
|
levelRank: "",
|
|
total: _total,
|
|
remark: "",
|
|
});
|
|
total = x.total;
|
|
_total = 0;
|
|
}
|
|
_reslut.push({
|
|
...x,
|
|
});
|
|
}
|
|
tmpType = x.type;
|
|
});
|
|
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวม",
|
|
levelRank: "",
|
|
total: total,
|
|
remark: "",
|
|
});
|
|
_reslut.push({
|
|
type: "",
|
|
typeRank: "",
|
|
level: "รวมทั้งสิ้น",
|
|
levelRank: "",
|
|
total: allTotal,
|
|
remark: "",
|
|
});
|
|
|
|
return new HttpSuccess({
|
|
template: "report4",
|
|
reportName: "report4",
|
|
data: {
|
|
dateCurrent: Extension.ToThaiShortDate(new Date()),
|
|
rootName: orgRootData ? orgRootData.orgRootName : "-",
|
|
data: _reslut,
|
|
},
|
|
});
|
|
}
|
|
|
|
@Get("report4-employee-temp/{rootId}")
|
|
async findReportEmp4Temp(@Path() rootId: string) {
|
|
const orgRootData = await this.orgRootRepository.findOne({
|
|
where: { id: rootId },
|
|
});
|
|
if (!orgRootData) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
|
|
|
const posMaster = await this.empTempPosMasterRepository
|
|
.createQueryBuilder("posMaster")
|
|
.leftJoinAndSelect("posMaster.positions", "position")
|
|
.leftJoinAndSelect("position.posType", "posType")
|
|
.leftJoinAndSelect("position.posLevel", "posLevel")
|
|
.where("posMaster.orgRootId = :rootId", { rootId })
|
|
.orderBy("posType.posTypeRank", "ASC")
|
|
.addOrderBy("posLevel.posLevelRank", "ASC")
|
|
.getMany();
|
|
|
|
const _posMaster = posMaster.map((x) => ({
|
|
type: [...new Set(x.positions.flatMap((y) => y.posType.posTypeName))].join(","),
|
|
typeRank: [...new Set(x.positions.flatMap((y) => y.posType.posTypeRank))].join(""),
|
|
typeShortNameAndRank: [
|
|
...new Set(
|
|
x.positions.map(
|
|
(y) => `${y.posType.posTypeShortName} ${y.posLevel.posLevelRank}`
|
|
)
|
|
),
|
|
].join(", "),
|
|
level: [...new Set(x.positions.flatMap((y) => y.posLevel.posLevelName))].join(","),
|
|
levelRank: [
|
|
...new Set(
|
|
x.positions.flatMap((y) => `${y.posType.posTypeRank}${y.posLevel.posLevelRank}`),
|
|
),
|
|
].join(""),
|
|
positions: [...new Set(x.positions.map((y) => y.positionName))].join(", "),
|
|
}));
|
|
|
|
const groupedData = _posMaster.reduce((acc: any, curr: any) => {
|
|
const key = `${curr.type}|${curr.typeRank}|${curr.level}|${curr.levelRank}`;
|
|
if (!acc[key]) {
|
|
acc[key] = { ...curr, total: 1 };
|
|
} else {
|
|
acc[key].total += 1;
|
|
const combinedPositions = new Set([
|
|
...acc[key].positions.split(", "),
|
|
...curr.positions.split(", "),
|
|
]);
|
|
acc[key].positions = Array.from(combinedPositions).join(", ");
|
|
}
|
|
return acc;
|
|
}, {});
|
|
// console.log("groupedData>>>",groupedData);
|
|
|
|
let result = Object.values(groupedData)
|
|
.map((x: any) => ({
|
|
type: x.type,
|
|
typeRank: parseInt(x.typeRank),
|
|
typeShortNameAndRank: x.typeShortNameAndRank,
|
|
level: x.level,
|
|
levelRank: parseInt(x.levelRank),
|
|
|
|
total: x.total,
|
|
remark: x.positions,
|
|
}))
|
|
.sort((x, y) => {
|
|
if (x.typeRank !== y.typeRank) {
|
|
return x.typeRank - y.typeRank;
|
|
}
|
|
return x.levelRank - y.levelRank;
|
|
});
|
|
let tmpType: string = "";
|
|
let allTotal: number = 0;
|
|
let total: number = 0;
|
|
let _total: number = 0;
|
|
let _reslut = new Array();
|
|
|
|
result.forEach((x: any, idx: number) => {
|
|
allTotal += x.total;
|
|
total += x.total;
|
|
if (x.type === tmpType) {
|
|
_reslut.push({
|
|
...x,
|
|
type: "",
|
|
});
|
|
} else {
|
|
if (x.type !== tmpType && tmpType != "") {
|
|
_total = total - x.total;
|
|
_reslut.push({
|
|
type: "รวม",
|
|
typeRank: "",
|
|
typeShortNameAndRank: "",
|
|
level: "",
|
|
levelRank: "",
|
|
total: _total,
|
|
remark: "",
|
|
});
|
|
total = x.total;
|
|
_total = 0;
|
|
}
|
|
_reslut.push({
|
|
...x,
|
|
});
|
|
}
|
|
tmpType = x.type;
|
|
});
|
|
|
|
_reslut.push({
|
|
type: "รวม",
|
|
typeRank: "",
|
|
typeShortNameAndRank: "",
|
|
level: "",
|
|
levelRank: "",
|
|
total: total,
|
|
remark: "",
|
|
});
|
|
_reslut.push({
|
|
type: "รวมทั้งสิ้น",
|
|
typeRank: "",
|
|
typeShortNameAndRank: "",
|
|
level: "",
|
|
levelRank: "",
|
|
total: allTotal,
|
|
remark: "",
|
|
});
|
|
|
|
return new HttpSuccess({
|
|
template: "report5",
|
|
reportName: "report5",
|
|
data: {
|
|
dateCurrent: Extension.ToThaiShortDate(new Date()),
|
|
rootName: orgRootData ? orgRootData.orgRootName : "-",
|
|
data: _reslut,
|
|
},
|
|
});
|
|
}
|
|
}
|