api ผังโครงสร้ารายบุคคล (ค้างตำแหน่ง)

This commit is contained in:
Bright 2024-08-06 23:29:41 +07:00
parent 0db2af5c78
commit 59359d2915

View file

@ -1750,6 +1750,270 @@ export class OrganizationController extends Controller {
return new HttpSuccess();
}
/**
* API Organizational Chart
*
* @summary Organizational Chart
*
* @param {string} revisionId Id revison
*/
@Get("org-chart/{revisionId}")
async orgchart(@Path() revisionId: string) {
const data = await this.orgRevisionRepository.findOne({
where: { id: revisionId }
});
if (!data) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลโครงสร้าง");
}
let posMasterRoot:any;
let posMasterChild1:any;
let posMasterChild2:any;
let posMasterChild3:any;
let posMasterChild4:any;
if(data.orgRevisionIsCurrent == true && data.orgRevisionIsDraft == false) {
posMasterRoot = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild1Id: IsNull(),
current_holderId: Not(IsNull())
},
relations:["current_holder", "orgRoot",]
});
posMasterChild1 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild2Id: IsNull(),
orgChild1Id: Not(IsNull()),
current_holderId: Not(IsNull())
},
relations:["current_holder", "orgChild1"]
});
posMasterChild2 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild3Id: IsNull(),
orgChild2Id: Not(IsNull()),
current_holderId: Not(IsNull())
},
relations:["current_holder", "orgChild2"]
});
posMasterChild3 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild4Id: IsNull(),
orgChild3Id: Not(IsNull()),
current_holderId: Not(IsNull())
},
relations:["current_holder", "orgChild3"]
});
posMasterChild4 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild4Id: Not(IsNull()),
current_holderId: Not(IsNull())
},
relations:["current_holder", "orgChild4"]
});
let formattedData = posMasterRoot
.filter((x:any) => x.current_holderId !=null)
.map((x0:PosMaster) => ({
personID: x0.current_holder.id,
name: x0.current_holder.firstName,
avatar: x0.current_holder.avatar,
positionName: /*this.positionRepository.findOne({
where: { id: x1.id },select:["positionName"]
})*/"",
positionNum: "",
positionNumInt: null,
departmentName: x0.orgRoot.orgRootName,
organizationId: x0.orgRoot.id,
children: posMasterChild1
.filter((x:any) => x.current_holderId !=null && x.orgRootId == x0.orgRootId)
.map((x1:PosMaster) =>({
personID: x1.current_holder.id,
name: x1.current_holder.firstName,
avatar: x1.current_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x1.orgChild1.orgChild1Name,
organizationId: x1.orgChild1.id,
children: posMasterChild2
.filter((x:any) => x.current_holderId !=null && x.child1Id == x1.orgChild1Id)
.map((x2:PosMaster) =>({
personID: x2.current_holder.id,
name: x2.current_holder.firstName,
avatar: x2.current_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x2.orgChild2.orgChild2Name,
organizationId: x2.orgChild2.id,
children: posMasterChild3
.filter((x:any) => x.current_holderId !=null && x.child2Id == x2.orgChild2Id)
.map((x3:PosMaster) =>({
personID: x3.current_holder.id,
name: x3.current_holder.firstName,
avatar: x3.current_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x3.orgChild3.orgChild3Name,
organizationId: x3.orgChild3.id,
children: posMasterChild4
.filter((x:any) => x.current_holderId !=null && x.child3Id == x3.orgChild3Id)
.map((x4:PosMaster) =>({
personID: x4.current_holder.id,
name: x4.current_holder.firstName,
avatar: x4.current_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x4.orgChild4.orgChild4Name,
organizationId: x4.orgChild4.id,
}))
}))
}))
}))
}));
const formattedData_ = {
personID: "",
name: "",
avatar: "",
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: data.orgRevisionName,
organizationId: data.id,
children: formattedData
};
return new HttpSuccess([formattedData_]);
}
else if(data.orgRevisionIsCurrent == false && data.orgRevisionIsDraft == true) {
posMasterRoot = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild1Id: IsNull(),
next_holderId: Not(IsNull())
},
relations:["next_holder", "orgRoot"]
});
posMasterChild1 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild2Id: IsNull(),
orgChild1Id: Not(IsNull()),
next_holderId: Not(IsNull())
},
relations:["next_holder", "orgChild1"]
});
posMasterChild2 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild3Id: IsNull(),
orgChild2Id: Not(IsNull()),
next_holderId: Not(IsNull())
},
relations:["next_holder", "orgChild2"]
});
posMasterChild3 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild4Id: IsNull(),
orgChild3Id: Not(IsNull()),
next_holderId: Not(IsNull())
},
relations:["next_holder", "orgChild3"]
});
posMasterChild4 = await this.posMasterRepository.find({
where: {
orgRevisionId: data.id,
orgChild4Id: Not(IsNull()),
next_holderId: Not(IsNull())
},
relations:["next_holder", "orgChild4"]
});
let formattedData = posMasterRoot
.filter((x:any) => x.next_holderId !=null)
.map((x0:PosMaster) => ({
personID: x0.next_holder.id,
name: x0.next_holder.firstName,
avatar: x0.next_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x0.orgRoot.orgRootName,
organizationId: x0.orgRoot.id,
children: posMasterChild1
.filter((x:any) => x.next_holderId !=null && x.orgRootId == x0.orgRootId)
.map((x1:PosMaster)=>({
personID: x1.next_holder.id,
name: x1.next_holder.firstName,
avatar: x1.next_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x1.orgChild1.orgChild1Name,
organizationId: x1.orgChild1.id,
children: posMasterChild2
.filter((x:any) => x.next_holderId !=null && x.child1Id == x1.orgChild1Id)
.map((x2:PosMaster) =>({
personID: x2.next_holder.id,
name: x2.next_holder.firstName,
avatar: x2.next_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x2.orgChild2.orgChild2Name,
organizationId: x2.orgChild2.id,
children: posMasterChild3
.filter((x:any) => x.next_holderId !=null && x.child2Id == x2.orgChild2Id)
.map((x3:PosMaster) =>({
personID: x3.next_holder.id,
name: x3.next_holder.firstName,
avatar: x3.next_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x3.orgChild3.orgChild3Name,
organizationId: x3.orgChild3.id,
children: posMasterChild4
.filter((x:any) => x.next_holderId !=null && x.child3Id == x3.orgChild3Id)
.map((x4:PosMaster) =>({
personID: x4.next_holder.id,
name: x4.next_holder.firstName,
avatar: x4.next_holder.avatar,
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: x4.orgChild4.orgChild4Name,
organizationId: x4.orgChild4.id,
}))
}))
}))
}))
}));
const formattedData_ = {
personID: "",
name: "",
avatar: "",
positionName: "",
positionNum: "",
positionNumInt: null,
departmentName: data.orgRevisionName,
organizationId: data.id,
children: formattedData
};
return new HttpSuccess([formattedData_]);
}
}
/**
* API Organizational StructChart
*