refactor api act/{id}
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m25s
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m25s
This commit is contained in:
parent
5102805278
commit
baa8496a69
3 changed files with 336 additions and 319 deletions
|
|
@ -65,6 +65,8 @@ import {
|
|||
} from "../services/PositionService";
|
||||
import { orgStructureCache } from "../utils/OrgStructureCache";
|
||||
import { OrgIdMapping, AllOrgMappings, SavePosMasterHistory } from "../interfaces/OrgMapping";
|
||||
import { OrgPermissionData, NodeLevel } from "../interfaces/OrgTypes";
|
||||
import { formatPosMaster, generateLabelName, filterPosMasters } from "../utils/org-formatting";
|
||||
|
||||
@Route("api/v1/org")
|
||||
@Tags("Organization")
|
||||
|
|
@ -5678,7 +5680,7 @@ export class OrganizationController extends Controller {
|
|||
*/
|
||||
@Get("act/{id}")
|
||||
async detailAct(@Path() id: string, @Request() request: RequestWithUser) {
|
||||
let _data: any = {
|
||||
let _data: OrgPermissionData = {
|
||||
root: null,
|
||||
child1: null,
|
||||
child2: null,
|
||||
|
|
@ -5721,7 +5723,7 @@ export class OrganizationController extends Controller {
|
|||
if (profileAssign && _privilege.privilege !== "OWNER" && _privilege.privilege !== "PARENT") {
|
||||
if (_privilege.privilege == "NORMAL") {
|
||||
const holder = profile.current_holders.find((x) => x.orgRevisionId === id);
|
||||
if (!holder) return;
|
||||
if (!holder) return new HttpSuccess({ remark: "", data: [] });
|
||||
_data.root = [holder.orgRootId];
|
||||
_data.child1 = [holder.orgChild1Id];
|
||||
_data.child2 = [holder.orgChild2Id];
|
||||
|
|
@ -5729,7 +5731,7 @@ export class OrganizationController extends Controller {
|
|||
_data.child4 = [holder.orgChild4Id];
|
||||
} else if (_privilege.privilege == "CHILD" || _privilege.privilege == "BROTHER") {
|
||||
const holder = profile.current_holders.find((x) => x.orgRevisionId === id);
|
||||
if (!holder) return;
|
||||
if (!holder) return new HttpSuccess({ remark: "", data: [] });
|
||||
_data.root = [holder.orgRootId];
|
||||
if (_privilege.root && _privilege.child1 === null) {
|
||||
} else if (_privilege.child1 && _privilege.child2 === null) {
|
||||
|
|
@ -5752,10 +5754,24 @@ export class OrganizationController extends Controller {
|
|||
}
|
||||
|
||||
const orgDna = await new permission().checkDna(request, request.user.sub);
|
||||
let level: any = resolveNodeLevel(orgDna);
|
||||
let level: NodeLevel = resolveNodeLevel(orgDna);
|
||||
|
||||
const orgRootData = await AppDataSource.getRepository(OrgRoot)
|
||||
.createQueryBuilder("orgRoot")
|
||||
.select([
|
||||
"orgRoot.id",
|
||||
"orgRoot.orgRootName",
|
||||
"orgRoot.orgRootShortName",
|
||||
"orgRoot.orgRootCode",
|
||||
"orgRoot.orgRootOrder",
|
||||
])
|
||||
.addSelect([
|
||||
"posMasters.id",
|
||||
"posMasters.posMasterNo",
|
||||
"posMasters.orgChild1Id",
|
||||
"posMasters.isDirector",
|
||||
])
|
||||
.addSelect(["current_holder.prefix", "current_holder.firstName", "current_holder.lastName"])
|
||||
.where("orgRoot.orgRevisionId = :id", { id })
|
||||
.andWhere(
|
||||
_data.root != undefined && _data.root != null
|
||||
|
|
@ -5767,8 +5783,8 @@ export class OrganizationController extends Controller {
|
|||
node: _data.root,
|
||||
},
|
||||
)
|
||||
.leftJoinAndSelect("orgRoot.posMasters", "posMasters")
|
||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
||||
.leftJoin("orgRoot.posMasters", "posMasters")
|
||||
.leftJoin("posMasters.current_holder", "current_holder")
|
||||
.orderBy("orgRoot.orgRootOrder", "ASC")
|
||||
.getMany();
|
||||
|
||||
|
|
@ -5777,6 +5793,25 @@ export class OrganizationController extends Controller {
|
|||
orgRootIds && orgRootIds.length > 0
|
||||
? await AppDataSource.getRepository(OrgChild1)
|
||||
.createQueryBuilder("orgChild1")
|
||||
.select([
|
||||
"orgChild1.id",
|
||||
"orgChild1.orgRootId",
|
||||
"orgChild1.orgChild1Name",
|
||||
"orgChild1.orgChild1ShortName",
|
||||
"orgChild1.orgChild1Code",
|
||||
"orgChild1.orgChild1Order",
|
||||
])
|
||||
.addSelect([
|
||||
"posMasters.id",
|
||||
"posMasters.posMasterNo",
|
||||
"posMasters.orgChild2Id",
|
||||
"posMasters.isDirector",
|
||||
])
|
||||
.addSelect([
|
||||
"current_holder.prefix",
|
||||
"current_holder.firstName",
|
||||
"current_holder.lastName",
|
||||
])
|
||||
.where("orgChild1.orgRootId IN (:...ids)", { ids: orgRootIds })
|
||||
.andWhere(
|
||||
_data.child1 != undefined && _data.child1 != null
|
||||
|
|
@ -5788,8 +5823,8 @@ export class OrganizationController extends Controller {
|
|||
node: _data.child1,
|
||||
},
|
||||
)
|
||||
.leftJoinAndSelect("orgChild1.posMasters", "posMasters")
|
||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
||||
.leftJoin("orgChild1.posMasters", "posMasters")
|
||||
.leftJoin("posMasters.current_holder", "current_holder")
|
||||
.orderBy("orgChild1.orgChild1Order", "ASC")
|
||||
.getMany()
|
||||
: [];
|
||||
|
|
@ -5799,6 +5834,25 @@ export class OrganizationController extends Controller {
|
|||
orgChild1Ids && orgChild1Ids.length > 0
|
||||
? await AppDataSource.getRepository(OrgChild2)
|
||||
.createQueryBuilder("orgChild2")
|
||||
.select([
|
||||
"orgChild2.id",
|
||||
"orgChild2.orgChild1Id",
|
||||
"orgChild2.orgChild2Name",
|
||||
"orgChild2.orgChild2ShortName",
|
||||
"orgChild2.orgChild2Code",
|
||||
"orgChild2.orgChild2Order",
|
||||
])
|
||||
.addSelect([
|
||||
"posMasters.id",
|
||||
"posMasters.posMasterNo",
|
||||
"posMasters.orgChild3Id",
|
||||
"posMasters.isDirector",
|
||||
])
|
||||
.addSelect([
|
||||
"current_holder.prefix",
|
||||
"current_holder.firstName",
|
||||
"current_holder.lastName",
|
||||
])
|
||||
.where("orgChild2.orgChild1Id IN (:...ids)", { ids: orgChild1Ids })
|
||||
.andWhere(
|
||||
_data.child2 != undefined && _data.child2 != null
|
||||
|
|
@ -5810,8 +5864,8 @@ export class OrganizationController extends Controller {
|
|||
node: _data.child2,
|
||||
},
|
||||
)
|
||||
.leftJoinAndSelect("orgChild2.posMasters", "posMasters")
|
||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
||||
.leftJoin("orgChild2.posMasters", "posMasters")
|
||||
.leftJoin("posMasters.current_holder", "current_holder")
|
||||
.orderBy("orgChild2.orgChild2Order", "ASC")
|
||||
.getMany()
|
||||
: [];
|
||||
|
|
@ -5821,6 +5875,25 @@ export class OrganizationController extends Controller {
|
|||
orgChild2Ids && orgChild2Ids.length > 0
|
||||
? await AppDataSource.getRepository(OrgChild3)
|
||||
.createQueryBuilder("orgChild3")
|
||||
.select([
|
||||
"orgChild3.id",
|
||||
"orgChild3.orgChild2Id",
|
||||
"orgChild3.orgChild3Name",
|
||||
"orgChild3.orgChild3ShortName",
|
||||
"orgChild3.orgChild3Code",
|
||||
"orgChild3.orgChild3Order",
|
||||
])
|
||||
.addSelect([
|
||||
"posMasters.id",
|
||||
"posMasters.posMasterNo",
|
||||
"posMasters.orgChild4Id",
|
||||
"posMasters.isDirector",
|
||||
])
|
||||
.addSelect([
|
||||
"current_holder.prefix",
|
||||
"current_holder.firstName",
|
||||
"current_holder.lastName",
|
||||
])
|
||||
.where("orgChild3.orgChild2Id IN (:...ids)", { ids: orgChild2Ids })
|
||||
.andWhere(
|
||||
_data.child3 != undefined && _data.child3 != null
|
||||
|
|
@ -5832,8 +5905,8 @@ export class OrganizationController extends Controller {
|
|||
node: _data.child3,
|
||||
},
|
||||
)
|
||||
.leftJoinAndSelect("orgChild3.posMasters", "posMasters")
|
||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
||||
.leftJoin("orgChild3.posMasters", "posMasters")
|
||||
.leftJoin("posMasters.current_holder", "current_holder")
|
||||
.orderBy("orgChild3.orgChild3Order", "ASC")
|
||||
.getMany()
|
||||
: [];
|
||||
|
|
@ -5843,6 +5916,20 @@ export class OrganizationController extends Controller {
|
|||
orgChild3Ids && orgChild3Ids.length > 0
|
||||
? await AppDataSource.getRepository(OrgChild4)
|
||||
.createQueryBuilder("orgChild4")
|
||||
.select([
|
||||
"orgChild4.id",
|
||||
"orgChild4.orgChild3Id",
|
||||
"orgChild4.orgChild4Name",
|
||||
"orgChild4.orgChild4ShortName",
|
||||
"orgChild4.orgChild4Code",
|
||||
"orgChild4.orgChild4Order",
|
||||
])
|
||||
.addSelect(["posMasters.id", "posMasters.posMasterNo", "posMasters.isDirector"])
|
||||
.addSelect([
|
||||
"current_holder.prefix",
|
||||
"current_holder.firstName",
|
||||
"current_holder.lastName",
|
||||
])
|
||||
.where("orgChild4.orgChild3Id IN (:...ids)", { ids: orgChild3Ids })
|
||||
.andWhere(
|
||||
_data.child4 != undefined && _data.child4 != null
|
||||
|
|
@ -5854,333 +5941,183 @@ export class OrganizationController extends Controller {
|
|||
node: _data.child4,
|
||||
},
|
||||
)
|
||||
.leftJoinAndSelect("orgChild4.posMasters", "posMasters")
|
||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
||||
.leftJoin("orgChild4.posMasters", "posMasters")
|
||||
.leftJoin("posMasters.current_holder", "current_holder")
|
||||
.orderBy("orgChild4.orgChild4Order", "ASC")
|
||||
.getMany()
|
||||
: [];
|
||||
|
||||
const cannotViewRootPosMaster =
|
||||
_privilege.privilege === "PARENT" ||
|
||||
(_privilege.privilege === "BROTHER" && level > 1) ||
|
||||
(_privilege.privilege === "CHILD" && level > 0) ||
|
||||
(_privilege.privilege === "NORMAL" && level != 0);
|
||||
(_privilege.privilege === "BROTHER" && level !== null && level > 1) ||
|
||||
(_privilege.privilege === "CHILD" && level !== null && level > 0) ||
|
||||
(_privilege.privilege === "NORMAL" && level !== null && level !== 0);
|
||||
|
||||
const cannotViewChild1PosMaster =
|
||||
(_privilege.privilege === "PARENT" && level > 1) ||
|
||||
(_privilege.privilege === "BROTHER" && level > 2) ||
|
||||
(_privilege.privilege === "CHILD" && level > 1) ||
|
||||
(_privilege.privilege === "PARENT" && level !== null && level > 1) ||
|
||||
(_privilege.privilege === "BROTHER" && level !== null && level > 2) ||
|
||||
(_privilege.privilege === "CHILD" && level !== null && level > 1) ||
|
||||
(_privilege.privilege === "NORMAL" && level !== 1);
|
||||
|
||||
const cannotViewChild2PosMaster =
|
||||
(_privilege.privilege === "PARENT" && level > 2) ||
|
||||
(_privilege.privilege === "BROTHER" && level > 3) ||
|
||||
(_privilege.privilege === "CHILD" && level > 2) ||
|
||||
(_privilege.privilege === "PARENT" && level !== null && level > 2) ||
|
||||
(_privilege.privilege === "BROTHER" && level !== null && level > 3) ||
|
||||
(_privilege.privilege === "CHILD" && level !== null && level > 2) ||
|
||||
(_privilege.privilege === "NORMAL" && level !== 2);
|
||||
|
||||
const cannotViewChild3PosMaster =
|
||||
(_privilege.privilege === "PARENT" && level > 3) ||
|
||||
(_privilege.privilege === "BROTHER" && level > 4) ||
|
||||
(_privilege.privilege === "CHILD" && level > 3) ||
|
||||
(_privilege.privilege === "PARENT" && level !== null && level > 3) ||
|
||||
(_privilege.privilege === "BROTHER" && level !== null && level > 4) ||
|
||||
(_privilege.privilege === "CHILD" && level !== null && level > 3) ||
|
||||
(_privilege.privilege === "NORMAL" && level !== 3);
|
||||
|
||||
const cannotViewChild4PosMaster =
|
||||
(_privilege.privilege === "PARENT" && level > 4) ||
|
||||
(_privilege.privilege === "CHILD" && level > 4) ||
|
||||
(_privilege.privilege === "PARENT" && level !== null && level > 4) ||
|
||||
(_privilege.privilege === "CHILD" && level !== null && level > 4) ||
|
||||
(_privilege.privilege === "NORMAL" && level !== 4);
|
||||
|
||||
// const formattedData = orgRootData.map((orgRoot) => {
|
||||
const formattedData = await Promise.all(
|
||||
orgRootData.map(async (orgRoot) => {
|
||||
return {
|
||||
orgTreeId: orgRoot.id,
|
||||
orgLevel: 0,
|
||||
orgName: orgRoot.orgRootName,
|
||||
orgTreeName: orgRoot.orgRootName,
|
||||
orgTreeShortName: orgRoot.orgRootShortName,
|
||||
orgTreeCode: orgRoot.orgRootCode,
|
||||
orgCode: orgRoot.orgRootCode + "00",
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName:
|
||||
orgRoot.orgRootName + " " + orgRoot.orgRootCode + "00" + " " + orgRoot.orgRootShortName,
|
||||
posMaster: cannotViewRootPosMaster
|
||||
? []
|
||||
: await Promise.all(
|
||||
orgRoot.posMasters
|
||||
.filter(
|
||||
(x) =>
|
||||
x.orgChild1Id == null &&
|
||||
// x.current_holderId != null &&
|
||||
x.isDirector === true,
|
||||
)
|
||||
// .sort((a, b) => a.posMasterOrder - b.posMasterOrder) // Sort by posMasterOrder ASC
|
||||
// .slice(0, 3) // Select the first 3 rows
|
||||
.map(async (x) => ({
|
||||
posmasterId: x.id,
|
||||
posNo: `${orgRoot.orgRootShortName} ${x.posMasterNo}`,
|
||||
orgTreeId: orgRoot.id,
|
||||
orgLevel: 0,
|
||||
fullNameCurrentHolder:
|
||||
x.current_holder == null
|
||||
? null
|
||||
: `${x.current_holder.prefix}${x.current_holder.firstName} ${x.current_holder.lastName}`,
|
||||
})),
|
||||
),
|
||||
children: await Promise.all(
|
||||
orgChild1Data
|
||||
.filter((orgChild1) => orgChild1.orgRootId === orgRoot.id)
|
||||
.map(async (orgChild1) => ({
|
||||
orgTreeId: orgChild1.id,
|
||||
orgRootId: orgRoot.id,
|
||||
orgLevel: 1,
|
||||
orgName: `${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild1.orgChild1Name,
|
||||
orgTreeShortName: orgChild1.orgChild1ShortName,
|
||||
orgTreeCode: orgChild1.orgChild1Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName:
|
||||
orgChild1.orgChild1Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild1.orgChild1Code +
|
||||
" " +
|
||||
orgChild1.orgChild1ShortName +
|
||||
"/" +
|
||||
orgRoot.orgRootName +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
"00" +
|
||||
" " +
|
||||
orgRoot.orgRootShortName,
|
||||
posMaster: cannotViewChild1PosMaster
|
||||
? []
|
||||
: await Promise.all(
|
||||
orgChild1.posMasters
|
||||
.filter(
|
||||
(x) =>
|
||||
x.orgChild2Id == null &&
|
||||
// x.current_holderId != null &&
|
||||
x.isDirector === true,
|
||||
)
|
||||
// .sort((a, b) => a.posMasterOrder - b.posMasterOrder) // Sort by posMasterOrder ASC
|
||||
// .slice(0, 3) // Select the first 3 rows
|
||||
.map(async (x) => ({
|
||||
posmasterId: x.id,
|
||||
posNo: `${orgChild1.orgChild1ShortName} ${x.posMasterNo}`,
|
||||
orgTreeId: orgChild1.id,
|
||||
orgLevel: 1,
|
||||
fullNameCurrentHolder:
|
||||
x.current_holder == null
|
||||
? null
|
||||
: `${x.current_holder.prefix}${x.current_holder.firstName} ${x.current_holder.lastName}`,
|
||||
})),
|
||||
),
|
||||
|
||||
children: await Promise.all(
|
||||
orgChild2Data
|
||||
.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)
|
||||
.map(async (orgChild2) => ({
|
||||
orgTreeId: orgChild2.id,
|
||||
orgRootId: orgChild1.id,
|
||||
orgLevel: 2,
|
||||
orgName: `${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild2.orgChild2Name,
|
||||
orgTreeShortName: orgChild2.orgChild2ShortName,
|
||||
orgTreeCode: orgChild2.orgChild2Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName:
|
||||
orgChild2.orgChild2Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild2.orgChild2Code +
|
||||
" " +
|
||||
orgChild2.orgChild2ShortName +
|
||||
"/" +
|
||||
orgChild1.orgChild1Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild1.orgChild1Code +
|
||||
" " +
|
||||
orgChild1.orgChild1ShortName +
|
||||
"/" +
|
||||
orgRoot.orgRootName +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
"00" +
|
||||
" " +
|
||||
orgRoot.orgRootShortName,
|
||||
posMaster: cannotViewChild2PosMaster
|
||||
? []
|
||||
: await Promise.all(
|
||||
orgChild2.posMasters
|
||||
.filter(
|
||||
(x) =>
|
||||
x.orgChild3Id == null &&
|
||||
// x.current_holderId != null &&
|
||||
x.isDirector === true,
|
||||
)
|
||||
// .sort((a, b) => a.posMasterOrder - b.posMasterOrder) // Sort by posMasterOrder ASC
|
||||
// .slice(0, 3) // Select the first 3 rows
|
||||
.map(async (x) => ({
|
||||
posmasterId: x.id,
|
||||
posNo: `${orgChild2.orgChild2ShortName} ${x.posMasterNo}`,
|
||||
orgTreeId: orgChild2.id,
|
||||
orgLevel: 2,
|
||||
fullNameCurrentHolder:
|
||||
x.current_holder == null
|
||||
? null
|
||||
: `${x.current_holder.prefix}${x.current_holder.firstName} ${x.current_holder.lastName}`,
|
||||
})),
|
||||
),
|
||||
|
||||
children: await Promise.all(
|
||||
orgChild3Data
|
||||
.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)
|
||||
.map(async (orgChild3) => ({
|
||||
orgTreeId: orgChild3.id,
|
||||
orgRootId: orgChild2.id,
|
||||
orgLevel: 3,
|
||||
orgName: `${orgChild3.orgChild3Name}/${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild3.orgChild3Name,
|
||||
orgTreeShortName: orgChild3.orgChild3ShortName,
|
||||
orgTreeCode: orgChild3.orgChild3Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName:
|
||||
orgChild3.orgChild3Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild3.orgChild3Code +
|
||||
" " +
|
||||
orgChild3.orgChild3ShortName +
|
||||
"/" +
|
||||
orgChild2.orgChild2Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild2.orgChild2Code +
|
||||
" " +
|
||||
orgChild2.orgChild2ShortName +
|
||||
"/" +
|
||||
orgChild1.orgChild1Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild1.orgChild1Code +
|
||||
" " +
|
||||
orgChild1.orgChild1ShortName +
|
||||
"/" +
|
||||
orgRoot.orgRootName +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
"00" +
|
||||
" " +
|
||||
orgRoot.orgRootShortName,
|
||||
posMaster: cannotViewChild3PosMaster
|
||||
? []
|
||||
: await Promise.all(
|
||||
orgChild3.posMasters
|
||||
.filter(
|
||||
(x) =>
|
||||
x.orgChild4Id == null &&
|
||||
// x.current_holderId != null &&
|
||||
x.isDirector === true,
|
||||
)
|
||||
// .sort((a, b) => a.posMasterOrder - b.posMasterOrder) // Sort by posMasterOrder ASC
|
||||
// .slice(0, 3) // Select the first 3 rows
|
||||
.map(async (x) => ({
|
||||
posmasterId: x.id,
|
||||
posNo: `${orgChild3.orgChild3ShortName} ${x.posMasterNo}`,
|
||||
orgTreeId: orgChild3.id,
|
||||
orgLevel: 3,
|
||||
fullNameCurrentHolder:
|
||||
x.current_holder == null
|
||||
? null
|
||||
: `${x.current_holder.prefix}${x.current_holder.firstName} ${x.current_holder.lastName}`,
|
||||
})),
|
||||
),
|
||||
|
||||
children: await Promise.all(
|
||||
orgChild4Data
|
||||
.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)
|
||||
.map(async (orgChild4) => ({
|
||||
orgTreeId: orgChild4.id,
|
||||
orgRootId: orgChild3.id,
|
||||
orgLevel: 4,
|
||||
orgName: `${orgChild4.orgChild4Name}/${orgChild3.orgChild3Name}/${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild4.orgChild4Name,
|
||||
orgTreeShortName: orgChild4.orgChild4ShortName,
|
||||
orgTreeCode: orgChild4.orgChild4Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName:
|
||||
orgChild4.orgChild4Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild4.orgChild4Code +
|
||||
" " +
|
||||
orgChild4.orgChild4ShortName +
|
||||
"/" +
|
||||
orgChild3.orgChild3Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild3.orgChild3Code +
|
||||
" " +
|
||||
orgChild3.orgChild3ShortName +
|
||||
"/" +
|
||||
orgChild2.orgChild2Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild2.orgChild2Code +
|
||||
" " +
|
||||
orgChild2.orgChild2ShortName +
|
||||
"/" +
|
||||
orgChild1.orgChild1Name +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
orgChild1.orgChild1Code +
|
||||
" " +
|
||||
orgChild1.orgChild1ShortName +
|
||||
"/" +
|
||||
orgRoot.orgRootName +
|
||||
" " +
|
||||
orgRoot.orgRootCode +
|
||||
"00" +
|
||||
" " +
|
||||
orgRoot.orgRootShortName,
|
||||
posMaster: cannotViewChild4PosMaster
|
||||
? []
|
||||
: await Promise.all(
|
||||
orgChild4.posMasters
|
||||
.filter(
|
||||
(x) =>
|
||||
// x.current_holderId != null &&
|
||||
x.isDirector === true,
|
||||
)
|
||||
// .sort((a, b) => a.posMasterOrder - b.posMasterOrder) // Sort by posMasterOrder ASC
|
||||
// .slice(0, 3) // Select the first 3 rows
|
||||
.map(async (x) => ({
|
||||
posmasterId: x.id,
|
||||
posNo: `${orgChild4.orgChild4ShortName} ${x.posMasterNo}`,
|
||||
orgTreeId: orgChild4.id,
|
||||
orgLevel: 4,
|
||||
fullNameCurrentHolder:
|
||||
x.current_holder == null
|
||||
? null
|
||||
: `${x.current_holder.prefix}${x.current_holder.firstName} ${x.current_holder.lastName}`,
|
||||
})),
|
||||
),
|
||||
})),
|
||||
),
|
||||
})),
|
||||
),
|
||||
})),
|
||||
),
|
||||
})),
|
||||
const formattedData = orgRootData.map((orgRoot) => ({
|
||||
orgTreeId: orgRoot.id,
|
||||
orgLevel: 0,
|
||||
orgName: orgRoot.orgRootName,
|
||||
orgTreeName: orgRoot.orgRootName,
|
||||
orgTreeShortName: orgRoot.orgRootShortName,
|
||||
orgTreeCode: orgRoot.orgRootCode,
|
||||
orgCode: orgRoot.orgRootCode + "00",
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName: generateLabelName(
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode + "00",
|
||||
orgRoot.orgRootShortName,
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode,
|
||||
orgRoot.orgRootShortName,
|
||||
),
|
||||
posMaster: cannotViewRootPosMaster
|
||||
? []
|
||||
: filterPosMasters(orgRoot.posMasters, "orgChild1Id").map((x) =>
|
||||
formatPosMaster(x, orgRoot.orgRootShortName, orgRoot.id, 0),
|
||||
),
|
||||
};
|
||||
}),
|
||||
);
|
||||
children: orgChild1Data
|
||||
.filter((orgChild1) => orgChild1.orgRootId === orgRoot.id)
|
||||
.map((orgChild1) => ({
|
||||
orgTreeId: orgChild1.id,
|
||||
orgRootId: orgRoot.id,
|
||||
orgLevel: 1,
|
||||
orgName: `${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild1.orgChild1Name,
|
||||
orgTreeShortName: orgChild1.orgChild1ShortName,
|
||||
orgTreeCode: orgChild1.orgChild1Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName: generateLabelName(
|
||||
orgChild1.orgChild1Name,
|
||||
orgChild1.orgChild1Code,
|
||||
orgChild1.orgChild1ShortName,
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode,
|
||||
orgRoot.orgRootShortName,
|
||||
),
|
||||
posMaster: cannotViewChild1PosMaster
|
||||
? []
|
||||
: filterPosMasters(orgChild1.posMasters, "orgChild2Id").map((x) =>
|
||||
formatPosMaster(x, orgChild1.orgChild1ShortName, orgChild1.id, 1),
|
||||
),
|
||||
children: orgChild2Data
|
||||
.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)
|
||||
.map((orgChild2) => ({
|
||||
orgTreeId: orgChild2.id,
|
||||
orgRootId: orgChild1.id,
|
||||
orgLevel: 2,
|
||||
orgName: `${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild2.orgChild2Name,
|
||||
orgTreeShortName: orgChild2.orgChild2ShortName,
|
||||
orgTreeCode: orgChild2.orgChild2Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName: generateLabelName(
|
||||
orgChild2.orgChild2Name,
|
||||
orgChild2.orgChild2Code,
|
||||
orgChild2.orgChild2ShortName,
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode,
|
||||
orgRoot.orgRootShortName,
|
||||
[orgChild1.orgChild1Name],
|
||||
[orgChild1.orgChild1Code],
|
||||
[orgChild1.orgChild1ShortName],
|
||||
),
|
||||
posMaster: cannotViewChild2PosMaster
|
||||
? []
|
||||
: filterPosMasters(orgChild2.posMasters, "orgChild3Id").map((x) =>
|
||||
formatPosMaster(x, orgChild2.orgChild2ShortName, orgChild2.id, 2),
|
||||
),
|
||||
children: orgChild3Data
|
||||
.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)
|
||||
.map((orgChild3) => ({
|
||||
orgTreeId: orgChild3.id,
|
||||
orgRootId: orgChild2.id,
|
||||
orgLevel: 3,
|
||||
orgName: `${orgChild3.orgChild3Name}/${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild3.orgChild3Name,
|
||||
orgTreeShortName: orgChild3.orgChild3ShortName,
|
||||
orgTreeCode: orgChild3.orgChild3Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName: generateLabelName(
|
||||
orgChild3.orgChild3Name,
|
||||
orgChild3.orgChild3Code,
|
||||
orgChild3.orgChild3ShortName,
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode,
|
||||
orgRoot.orgRootShortName,
|
||||
[orgChild2.orgChild2Name, orgChild1.orgChild1Name],
|
||||
[orgChild2.orgChild2Code, orgChild1.orgChild1Code],
|
||||
[orgChild2.orgChild2ShortName, orgChild1.orgChild1ShortName],
|
||||
),
|
||||
posMaster: cannotViewChild3PosMaster
|
||||
? []
|
||||
: filterPosMasters(orgChild3.posMasters, "orgChild4Id").map((x) =>
|
||||
formatPosMaster(x, orgChild3.orgChild3ShortName, orgChild3.id, 3),
|
||||
),
|
||||
children: orgChild4Data
|
||||
.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)
|
||||
.map((orgChild4) => ({
|
||||
orgTreeId: orgChild4.id,
|
||||
orgRootId: orgChild3.id,
|
||||
orgLevel: 4,
|
||||
orgName: `${orgChild4.orgChild4Name}/${orgChild3.orgChild3Name}/${orgChild2.orgChild2Name}/${orgChild1.orgChild1Name}/${orgRoot.orgRootName}`,
|
||||
orgTreeName: orgChild4.orgChild4Name,
|
||||
orgTreeShortName: orgChild4.orgChild4ShortName,
|
||||
orgTreeCode: orgChild4.orgChild4Code,
|
||||
orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code,
|
||||
orgRootName: orgRoot.orgRootName,
|
||||
labelName: generateLabelName(
|
||||
orgChild4.orgChild4Name,
|
||||
orgChild4.orgChild4Code,
|
||||
orgChild4.orgChild4ShortName,
|
||||
orgRoot.orgRootName,
|
||||
orgRoot.orgRootCode,
|
||||
orgRoot.orgRootShortName,
|
||||
[orgChild3.orgChild3Name, orgChild2.orgChild2Name, orgChild1.orgChild1Name],
|
||||
[orgChild3.orgChild3Code, orgChild2.orgChild2Code, orgChild1.orgChild1Code],
|
||||
[
|
||||
orgChild3.orgChild3ShortName,
|
||||
orgChild2.orgChild2ShortName,
|
||||
orgChild1.orgChild1ShortName,
|
||||
],
|
||||
),
|
||||
posMaster: cannotViewChild4PosMaster
|
||||
? []
|
||||
: orgChild4.posMasters
|
||||
.filter((x) => x.isDirector === true)
|
||||
.map((x) =>
|
||||
formatPosMaster(x, orgChild4.orgChild4ShortName, orgChild4.id, 4),
|
||||
),
|
||||
})),
|
||||
})),
|
||||
})),
|
||||
})),
|
||||
}));
|
||||
|
||||
return new HttpSuccess(formattedData);
|
||||
}
|
||||
|
|
|
|||
10
src/interfaces/OrgTypes.ts
Normal file
10
src/interfaces/OrgTypes.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
export interface OrgPermissionData {
|
||||
root: (string | null | undefined)[] | null;
|
||||
child1: (string | null | undefined)[] | null;
|
||||
child2: (string | null | undefined)[] | null;
|
||||
child3: (string | null | undefined)[] | null;
|
||||
child4: (string | null | undefined)[] | null;
|
||||
privilege?: "OWNER" | "PARENT" | "CHILD" | "BROTHER" | "NORMAL";
|
||||
}
|
||||
|
||||
export type NodeLevel = 0 | 1 | 2 | 3 | 4 | null;
|
||||
70
src/utils/org-formatting.ts
Normal file
70
src/utils/org-formatting.ts
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import { PosMaster } from "../entities/PosMaster";
|
||||
|
||||
export interface PosMasterFormatted {
|
||||
posmasterId: string;
|
||||
posNo: string;
|
||||
orgTreeId: string;
|
||||
orgLevel: number;
|
||||
fullNameCurrentHolder: string | null;
|
||||
}
|
||||
|
||||
export interface OrgTreeNode {
|
||||
orgTreeId: string;
|
||||
orgLevel: number;
|
||||
orgName: string;
|
||||
orgTreeName: string;
|
||||
orgTreeShortName: string;
|
||||
orgTreeCode: string;
|
||||
orgCode: string;
|
||||
orgRootName: string;
|
||||
labelName: string;
|
||||
posMaster: PosMasterFormatted[];
|
||||
children?: OrgTreeNode[];
|
||||
}
|
||||
|
||||
export function formatPosMaster(
|
||||
posMaster: PosMaster,
|
||||
orgShortName: string,
|
||||
orgTreeId: string,
|
||||
orgLevel: number,
|
||||
): PosMasterFormatted {
|
||||
return {
|
||||
posmasterId: posMaster.id,
|
||||
posNo: `${orgShortName} ${posMaster.posMasterNo}`,
|
||||
orgTreeId,
|
||||
orgLevel,
|
||||
fullNameCurrentHolder: posMaster.current_holder
|
||||
? `${posMaster.current_holder.prefix}${posMaster.current_holder.firstName} ${posMaster.current_holder.lastName}`
|
||||
: null,
|
||||
};
|
||||
}
|
||||
|
||||
export function generateLabelName(
|
||||
nodeName: string,
|
||||
nodeCode: string,
|
||||
nodeShortName: string,
|
||||
rootName: string,
|
||||
rootCode: string,
|
||||
rootShortName: string,
|
||||
parentNames?: string[],
|
||||
parentCodes?: string[],
|
||||
parentShortNames?: string[],
|
||||
): string {
|
||||
const parts = [nodeName, " ", rootCode, nodeCode, " ", nodeShortName];
|
||||
|
||||
if (parentNames) {
|
||||
for (let i = 0; i < parentNames.length; i++) {
|
||||
parts.push("/", parentNames[i], " ", rootCode, parentCodes![i], " ", parentShortNames![i]);
|
||||
}
|
||||
}
|
||||
|
||||
parts.push("/", rootName, " ", rootCode, "00", " ", rootShortName);
|
||||
return parts.join("");
|
||||
}
|
||||
|
||||
export function filterPosMasters(
|
||||
posMasters: PosMaster[],
|
||||
childLevelIdKey: keyof PosMaster,
|
||||
): PosMaster[] {
|
||||
return posMasters.filter((x) => x[childLevelIdKey] == null && x.isDirector === true);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue