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";
|
} from "../services/PositionService";
|
||||||
import { orgStructureCache } from "../utils/OrgStructureCache";
|
import { orgStructureCache } from "../utils/OrgStructureCache";
|
||||||
import { OrgIdMapping, AllOrgMappings, SavePosMasterHistory } from "../interfaces/OrgMapping";
|
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")
|
@Route("api/v1/org")
|
||||||
@Tags("Organization")
|
@Tags("Organization")
|
||||||
|
|
@ -5678,7 +5680,7 @@ export class OrganizationController extends Controller {
|
||||||
*/
|
*/
|
||||||
@Get("act/{id}")
|
@Get("act/{id}")
|
||||||
async detailAct(@Path() id: string, @Request() request: RequestWithUser) {
|
async detailAct(@Path() id: string, @Request() request: RequestWithUser) {
|
||||||
let _data: any = {
|
let _data: OrgPermissionData = {
|
||||||
root: null,
|
root: null,
|
||||||
child1: null,
|
child1: null,
|
||||||
child2: null,
|
child2: null,
|
||||||
|
|
@ -5721,7 +5723,7 @@ export class OrganizationController extends Controller {
|
||||||
if (profileAssign && _privilege.privilege !== "OWNER" && _privilege.privilege !== "PARENT") {
|
if (profileAssign && _privilege.privilege !== "OWNER" && _privilege.privilege !== "PARENT") {
|
||||||
if (_privilege.privilege == "NORMAL") {
|
if (_privilege.privilege == "NORMAL") {
|
||||||
const holder = profile.current_holders.find((x) => x.orgRevisionId === id);
|
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.root = [holder.orgRootId];
|
||||||
_data.child1 = [holder.orgChild1Id];
|
_data.child1 = [holder.orgChild1Id];
|
||||||
_data.child2 = [holder.orgChild2Id];
|
_data.child2 = [holder.orgChild2Id];
|
||||||
|
|
@ -5729,7 +5731,7 @@ export class OrganizationController extends Controller {
|
||||||
_data.child4 = [holder.orgChild4Id];
|
_data.child4 = [holder.orgChild4Id];
|
||||||
} else if (_privilege.privilege == "CHILD" || _privilege.privilege == "BROTHER") {
|
} else if (_privilege.privilege == "CHILD" || _privilege.privilege == "BROTHER") {
|
||||||
const holder = profile.current_holders.find((x) => x.orgRevisionId === id);
|
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.root = [holder.orgRootId];
|
||||||
if (_privilege.root && _privilege.child1 === null) {
|
if (_privilege.root && _privilege.child1 === null) {
|
||||||
} else if (_privilege.child1 && _privilege.child2 === 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);
|
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)
|
const orgRootData = await AppDataSource.getRepository(OrgRoot)
|
||||||
.createQueryBuilder("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 })
|
.where("orgRoot.orgRevisionId = :id", { id })
|
||||||
.andWhere(
|
.andWhere(
|
||||||
_data.root != undefined && _data.root != null
|
_data.root != undefined && _data.root != null
|
||||||
|
|
@ -5767,8 +5783,8 @@ export class OrganizationController extends Controller {
|
||||||
node: _data.root,
|
node: _data.root,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("orgRoot.posMasters", "posMasters")
|
.leftJoin("orgRoot.posMasters", "posMasters")
|
||||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
.leftJoin("posMasters.current_holder", "current_holder")
|
||||||
.orderBy("orgRoot.orgRootOrder", "ASC")
|
.orderBy("orgRoot.orgRootOrder", "ASC")
|
||||||
.getMany();
|
.getMany();
|
||||||
|
|
||||||
|
|
@ -5777,6 +5793,25 @@ export class OrganizationController extends Controller {
|
||||||
orgRootIds && orgRootIds.length > 0
|
orgRootIds && orgRootIds.length > 0
|
||||||
? await AppDataSource.getRepository(OrgChild1)
|
? await AppDataSource.getRepository(OrgChild1)
|
||||||
.createQueryBuilder("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 })
|
.where("orgChild1.orgRootId IN (:...ids)", { ids: orgRootIds })
|
||||||
.andWhere(
|
.andWhere(
|
||||||
_data.child1 != undefined && _data.child1 != null
|
_data.child1 != undefined && _data.child1 != null
|
||||||
|
|
@ -5788,8 +5823,8 @@ export class OrganizationController extends Controller {
|
||||||
node: _data.child1,
|
node: _data.child1,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("orgChild1.posMasters", "posMasters")
|
.leftJoin("orgChild1.posMasters", "posMasters")
|
||||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
.leftJoin("posMasters.current_holder", "current_holder")
|
||||||
.orderBy("orgChild1.orgChild1Order", "ASC")
|
.orderBy("orgChild1.orgChild1Order", "ASC")
|
||||||
.getMany()
|
.getMany()
|
||||||
: [];
|
: [];
|
||||||
|
|
@ -5799,6 +5834,25 @@ export class OrganizationController extends Controller {
|
||||||
orgChild1Ids && orgChild1Ids.length > 0
|
orgChild1Ids && orgChild1Ids.length > 0
|
||||||
? await AppDataSource.getRepository(OrgChild2)
|
? await AppDataSource.getRepository(OrgChild2)
|
||||||
.createQueryBuilder("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 })
|
.where("orgChild2.orgChild1Id IN (:...ids)", { ids: orgChild1Ids })
|
||||||
.andWhere(
|
.andWhere(
|
||||||
_data.child2 != undefined && _data.child2 != null
|
_data.child2 != undefined && _data.child2 != null
|
||||||
|
|
@ -5810,8 +5864,8 @@ export class OrganizationController extends Controller {
|
||||||
node: _data.child2,
|
node: _data.child2,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("orgChild2.posMasters", "posMasters")
|
.leftJoin("orgChild2.posMasters", "posMasters")
|
||||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
.leftJoin("posMasters.current_holder", "current_holder")
|
||||||
.orderBy("orgChild2.orgChild2Order", "ASC")
|
.orderBy("orgChild2.orgChild2Order", "ASC")
|
||||||
.getMany()
|
.getMany()
|
||||||
: [];
|
: [];
|
||||||
|
|
@ -5821,6 +5875,25 @@ export class OrganizationController extends Controller {
|
||||||
orgChild2Ids && orgChild2Ids.length > 0
|
orgChild2Ids && orgChild2Ids.length > 0
|
||||||
? await AppDataSource.getRepository(OrgChild3)
|
? await AppDataSource.getRepository(OrgChild3)
|
||||||
.createQueryBuilder("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 })
|
.where("orgChild3.orgChild2Id IN (:...ids)", { ids: orgChild2Ids })
|
||||||
.andWhere(
|
.andWhere(
|
||||||
_data.child3 != undefined && _data.child3 != null
|
_data.child3 != undefined && _data.child3 != null
|
||||||
|
|
@ -5832,8 +5905,8 @@ export class OrganizationController extends Controller {
|
||||||
node: _data.child3,
|
node: _data.child3,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("orgChild3.posMasters", "posMasters")
|
.leftJoin("orgChild3.posMasters", "posMasters")
|
||||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
.leftJoin("posMasters.current_holder", "current_holder")
|
||||||
.orderBy("orgChild3.orgChild3Order", "ASC")
|
.orderBy("orgChild3.orgChild3Order", "ASC")
|
||||||
.getMany()
|
.getMany()
|
||||||
: [];
|
: [];
|
||||||
|
|
@ -5843,6 +5916,20 @@ export class OrganizationController extends Controller {
|
||||||
orgChild3Ids && orgChild3Ids.length > 0
|
orgChild3Ids && orgChild3Ids.length > 0
|
||||||
? await AppDataSource.getRepository(OrgChild4)
|
? await AppDataSource.getRepository(OrgChild4)
|
||||||
.createQueryBuilder("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 })
|
.where("orgChild4.orgChild3Id IN (:...ids)", { ids: orgChild3Ids })
|
||||||
.andWhere(
|
.andWhere(
|
||||||
_data.child4 != undefined && _data.child4 != null
|
_data.child4 != undefined && _data.child4 != null
|
||||||
|
|
@ -5854,333 +5941,183 @@ export class OrganizationController extends Controller {
|
||||||
node: _data.child4,
|
node: _data.child4,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("orgChild4.posMasters", "posMasters")
|
.leftJoin("orgChild4.posMasters", "posMasters")
|
||||||
.leftJoinAndSelect("posMasters.current_holder", "current_holder")
|
.leftJoin("posMasters.current_holder", "current_holder")
|
||||||
.orderBy("orgChild4.orgChild4Order", "ASC")
|
.orderBy("orgChild4.orgChild4Order", "ASC")
|
||||||
.getMany()
|
.getMany()
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
const cannotViewRootPosMaster =
|
const cannotViewRootPosMaster =
|
||||||
_privilege.privilege === "PARENT" ||
|
_privilege.privilege === "PARENT" ||
|
||||||
(_privilege.privilege === "BROTHER" && level > 1) ||
|
(_privilege.privilege === "BROTHER" && level !== null && level > 1) ||
|
||||||
(_privilege.privilege === "CHILD" && level > 0) ||
|
(_privilege.privilege === "CHILD" && level !== null && level > 0) ||
|
||||||
(_privilege.privilege === "NORMAL" && level != 0);
|
(_privilege.privilege === "NORMAL" && level !== null && level !== 0);
|
||||||
|
|
||||||
const cannotViewChild1PosMaster =
|
const cannotViewChild1PosMaster =
|
||||||
(_privilege.privilege === "PARENT" && level > 1) ||
|
(_privilege.privilege === "PARENT" && level !== null && level > 1) ||
|
||||||
(_privilege.privilege === "BROTHER" && level > 2) ||
|
(_privilege.privilege === "BROTHER" && level !== null && level > 2) ||
|
||||||
(_privilege.privilege === "CHILD" && level > 1) ||
|
(_privilege.privilege === "CHILD" && level !== null && level > 1) ||
|
||||||
(_privilege.privilege === "NORMAL" && level !== 1);
|
(_privilege.privilege === "NORMAL" && level !== 1);
|
||||||
|
|
||||||
const cannotViewChild2PosMaster =
|
const cannotViewChild2PosMaster =
|
||||||
(_privilege.privilege === "PARENT" && level > 2) ||
|
(_privilege.privilege === "PARENT" && level !== null && level > 2) ||
|
||||||
(_privilege.privilege === "BROTHER" && level > 3) ||
|
(_privilege.privilege === "BROTHER" && level !== null && level > 3) ||
|
||||||
(_privilege.privilege === "CHILD" && level > 2) ||
|
(_privilege.privilege === "CHILD" && level !== null && level > 2) ||
|
||||||
(_privilege.privilege === "NORMAL" && level !== 2);
|
(_privilege.privilege === "NORMAL" && level !== 2);
|
||||||
|
|
||||||
const cannotViewChild3PosMaster =
|
const cannotViewChild3PosMaster =
|
||||||
(_privilege.privilege === "PARENT" && level > 3) ||
|
(_privilege.privilege === "PARENT" && level !== null && level > 3) ||
|
||||||
(_privilege.privilege === "BROTHER" && level > 4) ||
|
(_privilege.privilege === "BROTHER" && level !== null && level > 4) ||
|
||||||
(_privilege.privilege === "CHILD" && level > 3) ||
|
(_privilege.privilege === "CHILD" && level !== null && level > 3) ||
|
||||||
(_privilege.privilege === "NORMAL" && level !== 3);
|
(_privilege.privilege === "NORMAL" && level !== 3);
|
||||||
|
|
||||||
const cannotViewChild4PosMaster =
|
const cannotViewChild4PosMaster =
|
||||||
(_privilege.privilege === "PARENT" && level > 4) ||
|
(_privilege.privilege === "PARENT" && level !== null && level > 4) ||
|
||||||
(_privilege.privilege === "CHILD" && level > 4) ||
|
(_privilege.privilege === "CHILD" && level !== null && level > 4) ||
|
||||||
(_privilege.privilege === "NORMAL" && level !== 4);
|
(_privilege.privilege === "NORMAL" && level !== 4);
|
||||||
|
|
||||||
// const formattedData = orgRootData.map((orgRoot) => {
|
const formattedData = orgRootData.map((orgRoot) => ({
|
||||||
const formattedData = await Promise.all(
|
orgTreeId: orgRoot.id,
|
||||||
orgRootData.map(async (orgRoot) => {
|
orgLevel: 0,
|
||||||
return {
|
orgName: orgRoot.orgRootName,
|
||||||
orgTreeId: orgRoot.id,
|
orgTreeName: orgRoot.orgRootName,
|
||||||
orgLevel: 0,
|
orgTreeShortName: orgRoot.orgRootShortName,
|
||||||
orgName: orgRoot.orgRootName,
|
orgTreeCode: orgRoot.orgRootCode,
|
||||||
orgTreeName: orgRoot.orgRootName,
|
orgCode: orgRoot.orgRootCode + "00",
|
||||||
orgTreeShortName: orgRoot.orgRootShortName,
|
orgRootName: orgRoot.orgRootName,
|
||||||
orgTreeCode: orgRoot.orgRootCode,
|
labelName: generateLabelName(
|
||||||
orgCode: orgRoot.orgRootCode + "00",
|
orgRoot.orgRootName,
|
||||||
orgRootName: orgRoot.orgRootName,
|
orgRoot.orgRootCode + "00",
|
||||||
labelName:
|
orgRoot.orgRootShortName,
|
||||||
orgRoot.orgRootName + " " + orgRoot.orgRootCode + "00" + " " + orgRoot.orgRootShortName,
|
orgRoot.orgRootName,
|
||||||
posMaster: cannotViewRootPosMaster
|
orgRoot.orgRootCode,
|
||||||
? []
|
orgRoot.orgRootShortName,
|
||||||
: await Promise.all(
|
),
|
||||||
orgRoot.posMasters
|
posMaster: cannotViewRootPosMaster
|
||||||
.filter(
|
? []
|
||||||
(x) =>
|
: filterPosMasters(orgRoot.posMasters, "orgChild1Id").map((x) =>
|
||||||
x.orgChild1Id == null &&
|
formatPosMaster(x, orgRoot.orgRootShortName, orgRoot.id, 0),
|
||||||
// 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}`,
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
),
|
),
|
||||||
};
|
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);
|
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