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"; } 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,45 +5941,42 @@ 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(
orgRootData.map(async (orgRoot) => {
return {
orgTreeId: orgRoot.id, orgTreeId: orgRoot.id,
orgLevel: 0, orgLevel: 0,
orgName: orgRoot.orgRootName, orgName: orgRoot.orgRootName,
@ -5901,35 +5985,22 @@ export class OrganizationController extends Controller {
orgTreeCode: orgRoot.orgRootCode, orgTreeCode: orgRoot.orgRootCode,
orgCode: orgRoot.orgRootCode + "00", orgCode: orgRoot.orgRootCode + "00",
orgRootName: orgRoot.orgRootName, orgRootName: orgRoot.orgRootName,
labelName: labelName: generateLabelName(
orgRoot.orgRootName + " " + orgRoot.orgRootCode + "00" + " " + orgRoot.orgRootShortName, orgRoot.orgRootName,
orgRoot.orgRootCode + "00",
orgRoot.orgRootShortName,
orgRoot.orgRootName,
orgRoot.orgRootCode,
orgRoot.orgRootShortName,
),
posMaster: cannotViewRootPosMaster posMaster: cannotViewRootPosMaster
? [] ? []
: await Promise.all( : filterPosMasters(orgRoot.posMasters, "orgChild1Id").map((x) =>
orgRoot.posMasters formatPosMaster(x, orgRoot.orgRootShortName, orgRoot.id, 0),
.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( children: orgChild1Data
orgChild1Data
.filter((orgChild1) => orgChild1.orgRootId === orgRoot.id) .filter((orgChild1) => orgChild1.orgRootId === orgRoot.id)
.map(async (orgChild1) => ({ .map((orgChild1) => ({
orgTreeId: orgChild1.id, orgTreeId: orgChild1.id,
orgRootId: orgRoot.id, orgRootId: orgRoot.id,
orgLevel: 1, orgLevel: 1,
@ -5939,48 +6010,22 @@ export class OrganizationController extends Controller {
orgTreeCode: orgChild1.orgChild1Code, orgTreeCode: orgChild1.orgChild1Code,
orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code, orgCode: orgRoot.orgRootCode + orgChild1.orgChild1Code,
orgRootName: orgRoot.orgRootName, orgRootName: orgRoot.orgRootName,
labelName: labelName: generateLabelName(
orgChild1.orgChild1Name + orgChild1.orgChild1Name,
" " + orgChild1.orgChild1Code,
orgRoot.orgRootCode + orgChild1.orgChild1ShortName,
orgChild1.orgChild1Code + orgRoot.orgRootName,
" " + orgRoot.orgRootCode,
orgChild1.orgChild1ShortName +
"/" +
orgRoot.orgRootName +
" " +
orgRoot.orgRootCode +
"00" +
" " +
orgRoot.orgRootShortName, orgRoot.orgRootShortName,
),
posMaster: cannotViewChild1PosMaster posMaster: cannotViewChild1PosMaster
? [] ? []
: await Promise.all( : filterPosMasters(orgChild1.posMasters, "orgChild2Id").map((x) =>
orgChild1.posMasters formatPosMaster(x, orgChild1.orgChild1ShortName, orgChild1.id, 1),
.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: orgChild2Data
children: await Promise.all(
orgChild2Data
.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id) .filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)
.map(async (orgChild2) => ({ .map((orgChild2) => ({
orgTreeId: orgChild2.id, orgTreeId: orgChild2.id,
orgRootId: orgChild1.id, orgRootId: orgChild1.id,
orgLevel: 2, orgLevel: 2,
@ -5990,55 +6035,25 @@ export class OrganizationController extends Controller {
orgTreeCode: orgChild2.orgChild2Code, orgTreeCode: orgChild2.orgChild2Code,
orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code, orgCode: orgRoot.orgRootCode + orgChild2.orgChild2Code,
orgRootName: orgRoot.orgRootName, orgRootName: orgRoot.orgRootName,
labelName: labelName: generateLabelName(
orgChild2.orgChild2Name + orgChild2.orgChild2Name,
" " + orgChild2.orgChild2Code,
orgRoot.orgRootCode + orgChild2.orgChild2ShortName,
orgChild2.orgChild2Code + orgRoot.orgRootName,
" " + orgRoot.orgRootCode,
orgChild2.orgChild2ShortName +
"/" +
orgChild1.orgChild1Name +
" " +
orgRoot.orgRootCode +
orgChild1.orgChild1Code +
" " +
orgChild1.orgChild1ShortName +
"/" +
orgRoot.orgRootName +
" " +
orgRoot.orgRootCode +
"00" +
" " +
orgRoot.orgRootShortName, orgRoot.orgRootShortName,
[orgChild1.orgChild1Name],
[orgChild1.orgChild1Code],
[orgChild1.orgChild1ShortName],
),
posMaster: cannotViewChild2PosMaster posMaster: cannotViewChild2PosMaster
? [] ? []
: await Promise.all( : filterPosMasters(orgChild2.posMasters, "orgChild3Id").map((x) =>
orgChild2.posMasters formatPosMaster(x, orgChild2.orgChild2ShortName, orgChild2.id, 2),
.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: orgChild3Data
children: await Promise.all(
orgChild3Data
.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id) .filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)
.map(async (orgChild3) => ({ .map((orgChild3) => ({
orgTreeId: orgChild3.id, orgTreeId: orgChild3.id,
orgRootId: orgChild2.id, orgRootId: orgChild2.id,
orgLevel: 3, orgLevel: 3,
@ -6048,62 +6063,25 @@ export class OrganizationController extends Controller {
orgTreeCode: orgChild3.orgChild3Code, orgTreeCode: orgChild3.orgChild3Code,
orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code, orgCode: orgRoot.orgRootCode + orgChild3.orgChild3Code,
orgRootName: orgRoot.orgRootName, orgRootName: orgRoot.orgRootName,
labelName: labelName: generateLabelName(
orgChild3.orgChild3Name + orgChild3.orgChild3Name,
" " + orgChild3.orgChild3Code,
orgRoot.orgRootCode + orgChild3.orgChild3ShortName,
orgChild3.orgChild3Code + orgRoot.orgRootName,
" " + orgRoot.orgRootCode,
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, orgRoot.orgRootShortName,
[orgChild2.orgChild2Name, orgChild1.orgChild1Name],
[orgChild2.orgChild2Code, orgChild1.orgChild1Code],
[orgChild2.orgChild2ShortName, orgChild1.orgChild1ShortName],
),
posMaster: cannotViewChild3PosMaster posMaster: cannotViewChild3PosMaster
? [] ? []
: await Promise.all( : filterPosMasters(orgChild3.posMasters, "orgChild4Id").map((x) =>
orgChild3.posMasters formatPosMaster(x, orgChild3.orgChild3ShortName, orgChild3.id, 3),
.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: orgChild4Data
children: await Promise.all(
orgChild4Data
.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id) .filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)
.map(async (orgChild4) => ({ .map((orgChild4) => ({
orgTreeId: orgChild4.id, orgTreeId: orgChild4.id,
orgRootId: orgChild3.id, orgRootId: orgChild3.id,
orgLevel: 4, orgLevel: 4,
@ -6113,74 +6091,33 @@ export class OrganizationController extends Controller {
orgTreeCode: orgChild4.orgChild4Code, orgTreeCode: orgChild4.orgChild4Code,
orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code, orgCode: orgRoot.orgRootCode + orgChild4.orgChild4Code,
orgRootName: orgRoot.orgRootName, orgRootName: orgRoot.orgRootName,
labelName: labelName: generateLabelName(
orgChild4.orgChild4Name + orgChild4.orgChild4Name,
" " + orgChild4.orgChild4Code,
orgRoot.orgRootCode + orgChild4.orgChild4ShortName,
orgChild4.orgChild4Code + orgRoot.orgRootName,
" " + orgRoot.orgRootCode,
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, orgRoot.orgRootShortName,
[orgChild3.orgChild3Name, orgChild2.orgChild2Name, orgChild1.orgChild1Name],
[orgChild3.orgChild3Code, orgChild2.orgChild2Code, orgChild1.orgChild1Code],
[
orgChild3.orgChild3ShortName,
orgChild2.orgChild2ShortName,
orgChild1.orgChild1ShortName,
],
),
posMaster: cannotViewChild4PosMaster posMaster: cannotViewChild4PosMaster
? [] ? []
: await Promise.all( : orgChild4.posMasters
orgChild4.posMasters .filter((x) => x.isDirector === true)
.filter( .map((x) =>
(x) => formatPosMaster(x, orgChild4.orgChild4ShortName, orgChild4.id, 4),
// 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}`,
})),
), ),
})), })),
),
})), })),
),
})), })),
),
})), })),
), }));
};
}),
);
return new HttpSuccess(formattedData); 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);
}