refactor api act/{id}
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m25s

This commit is contained in:
Warunee Tamkoo 2026-03-10 11:45:25 +07:00
parent 5102805278
commit baa8496a69
3 changed files with 336 additions and 319 deletions

View file

@ -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);
}

View 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;

View 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);
}