law-common 10.75.0 → 10.75.1-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/src/api/index.d.ts +2 -0
  2. package/dist/src/api/index.js +2 -0
  3. package/dist/src/api/interface/leave_approval.create.dto.interface.d.ts +5 -0
  4. package/dist/src/api/interface/leave_approval.create.dto.interface.js +2 -0
  5. package/dist/src/api/interface/leave_approval.update.dto.interface.d.ts +18 -0
  6. package/dist/src/api/interface/leave_approval.update.dto.interface.js +13 -0
  7. package/dist/src/entities/enums/leave_approval_status_enum.d.ts +13 -0
  8. package/dist/src/entities/enums/leave_approval_status_enum.js +17 -0
  9. package/dist/src/entities/flow-configs/base-flow-config.enums.d.ts +74 -0
  10. package/dist/src/entities/flow-configs/base-flow-config.enums.js +79 -0
  11. package/dist/src/entities/flow-configs/base-flow-config.factory.d.ts +116 -0
  12. package/dist/src/entities/flow-configs/base-flow-config.factory.js +120 -0
  13. package/dist/src/entities/flow-configs/leave_approval_flow.config.d.ts +6 -0
  14. package/dist/src/entities/flow-configs/leave_approval_flow.config.js +243 -0
  15. package/dist/src/entities/index.d.ts +4 -0
  16. package/dist/src/entities/index.js +4 -0
  17. package/dist/src/entities/interface/entity.utils.interface.d.ts +6 -3
  18. package/dist/src/entities/interface/entity.utils.interface.js +1 -0
  19. package/dist/src/entities/interface/leave_approval.entity.interface.d.ts +10 -0
  20. package/dist/src/entities/interface/leave_approval.entity.interface.js +2 -0
  21. package/dist/src/entities/model/entity.model.interface.js +2 -0
  22. package/dist/src/entities/model/leave.entity.model.d.ts +9 -1
  23. package/dist/src/entities/model/leave.entity.model.js +9 -0
  24. package/dist/src/entities/model/leave_approval.entity.model.d.ts +38 -0
  25. package/dist/src/entities/model/leave_approval.entity.model.js +111 -0
  26. package/dist/src/entities/model/user.entity.model.d.ts +5 -1
  27. package/dist/src/entities/model/user.entity.model.js +13 -0
  28. package/dist/src/utils/entity.flow.util.js +3 -0
  29. package/package.json +3 -2
@@ -97,3 +97,5 @@ export * from "./interface/client_quote_rate.update.dto.interface";
97
97
  export * from "./interface/project-revenue-split.create.dto";
98
98
  export * from "./interface/entity_history.create.dto.interface";
99
99
  export * from "./interface/entity_history.update.dto.interface";
100
+ export * from "./interface/leave_approval.create.dto.interface";
101
+ export * from "./interface/leave_approval.update.dto.interface";
@@ -117,3 +117,5 @@ __exportStar(require("./interface/client_quote_rate.update.dto.interface"), expo
117
117
  __exportStar(require("./interface/project-revenue-split.create.dto"), exports);
118
118
  __exportStar(require("./interface/entity_history.create.dto.interface"), exports);
119
119
  __exportStar(require("./interface/entity_history.update.dto.interface"), exports);
120
+ __exportStar(require("./interface/leave_approval.create.dto.interface"), exports);
121
+ __exportStar(require("./interface/leave_approval.update.dto.interface"), exports);
@@ -0,0 +1,5 @@
1
+ import { IEntityCreateDto } from "../../entities";
2
+ import { ILeaveApprovalEntity } from "../../entities/interface/leave_approval.entity.interface";
3
+ export type ILeaveApprovalCreateExclude = "status";
4
+ export interface ILeaveApprovalCreateDto extends Omit<IEntityCreateDto<ILeaveApprovalEntity>, ILeaveApprovalCreateExclude> {
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,18 @@
1
+ import { DeepPartialButRequired } from "./api.utils.interface";
2
+ import { ILeaveApprovalCreateDto } from "./leave_approval.create.dto.interface";
3
+ export type ILeaveApprovalUpdateDto = DeepPartialButRequired<ILeaveApprovalCreateDto, never> & {
4
+ actionData: ILeaveApprovalActionDataDto;
5
+ };
6
+ export interface ILeaveApprovalActionDataDto {
7
+ action: LeaveApprovalActionEnum;
8
+ remark?: string;
9
+ }
10
+ export declare enum LeaveApprovalActionEnum {
11
+ UPDATE = "update",
12
+ DELETE = "delete",
13
+ CREATE = "create",
14
+ APPROVE = "approve",
15
+ REJECT = "reject",
16
+ RECALL = "recall",
17
+ DEACTIVATE = "deactivate"
18
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LeaveApprovalActionEnum = void 0;
4
+ var LeaveApprovalActionEnum;
5
+ (function (LeaveApprovalActionEnum) {
6
+ LeaveApprovalActionEnum["UPDATE"] = "update";
7
+ LeaveApprovalActionEnum["DELETE"] = "delete";
8
+ LeaveApprovalActionEnum["CREATE"] = "create";
9
+ LeaveApprovalActionEnum["APPROVE"] = "approve";
10
+ LeaveApprovalActionEnum["REJECT"] = "reject";
11
+ LeaveApprovalActionEnum["RECALL"] = "recall";
12
+ LeaveApprovalActionEnum["DEACTIVATE"] = "deactivate";
13
+ })(LeaveApprovalActionEnum || (exports.LeaveApprovalActionEnum = LeaveApprovalActionEnum = {}));
@@ -0,0 +1,13 @@
1
+ export declare enum LeaveApprovalStatusEnum {
2
+ DEACTIVATED = "DEACTIVATED",
3
+ CREATED = "CREATED",
4
+ UPDATED = "UPDATED",
5
+ DELETED = "DELETED",
6
+ APPROVED = "APPROVED",
7
+ REJECTED = "REJECTED",
8
+ CREATE_APPROVAL_PENDING = "CREATE_APPROVAL_PENDING",
9
+ UPDATE_APPROVAL_PENDING = "UPDATE_APPROVAL_PENDING",
10
+ DELETE_APPROVAL_PENDING = "DELETE_APPROVAL_PENDING",
11
+ RESOLVED_REJECTED = "RESOLVED_REJECTED",
12
+ ESCALATED = "ESCALATED"
13
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LeaveApprovalStatusEnum = void 0;
4
+ var LeaveApprovalStatusEnum;
5
+ (function (LeaveApprovalStatusEnum) {
6
+ LeaveApprovalStatusEnum["DEACTIVATED"] = "DEACTIVATED";
7
+ LeaveApprovalStatusEnum["CREATED"] = "CREATED";
8
+ LeaveApprovalStatusEnum["UPDATED"] = "UPDATED";
9
+ LeaveApprovalStatusEnum["DELETED"] = "DELETED";
10
+ LeaveApprovalStatusEnum["APPROVED"] = "APPROVED";
11
+ LeaveApprovalStatusEnum["REJECTED"] = "REJECTED";
12
+ LeaveApprovalStatusEnum["CREATE_APPROVAL_PENDING"] = "CREATE_APPROVAL_PENDING";
13
+ LeaveApprovalStatusEnum["UPDATE_APPROVAL_PENDING"] = "UPDATE_APPROVAL_PENDING";
14
+ LeaveApprovalStatusEnum["DELETE_APPROVAL_PENDING"] = "DELETE_APPROVAL_PENDING";
15
+ LeaveApprovalStatusEnum["RESOLVED_REJECTED"] = "RESOLVED_REJECTED";
16
+ LeaveApprovalStatusEnum["ESCALATED"] = "ESCALATED";
17
+ })(LeaveApprovalStatusEnum || (exports.LeaveApprovalStatusEnum = LeaveApprovalStatusEnum = {}));
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Base action enum shared across all entity flow configs.
3
+ *
4
+ * Entity-specific action enums should re-use these values for common actions
5
+ * and declare additional values for entity-specific actions.
6
+ *
7
+ * @example
8
+ * // Extending with entity-specific actions
9
+ * export enum VendorActionEnum {
10
+ * // — base actions (re-declare to keep enum self-contained) —
11
+ * VIEW = BaseFlowActionEnum.VIEW,
12
+ * CREATE = BaseFlowActionEnum.CREATE,
13
+ * UPDATE = BaseFlowActionEnum.UPDATE,
14
+ * DELETE = BaseFlowActionEnum.DELETE,
15
+ * APPROVE = BaseFlowActionEnum.APPROVE,
16
+ * REJECT = BaseFlowActionEnum.REJECT,
17
+ * RECALL = BaseFlowActionEnum.RECALL,
18
+ * DEACTIVATE = BaseFlowActionEnum.DEACTIVATE,
19
+ * // — entity-specific additions —
20
+ * SUBMIT = "submit",
21
+ * ESCALATE = "escalate",
22
+ * }
23
+ */
24
+ export declare enum BaseFlowActionEnum {
25
+ VIEW = "view",
26
+ CREATE = "create",
27
+ UPDATE = "update",
28
+ DELETE = "delete",
29
+ APPROVE = "approve",
30
+ REJECT = "reject",
31
+ RECALL = "recall",
32
+ DEACTIVATE = "deactivate"
33
+ }
34
+ /**
35
+ * Base status enum shared across all entity flow configs.
36
+ *
37
+ * Entity-specific status enums should re-use these values for common statuses
38
+ * and declare additional values for entity-specific statuses.
39
+ *
40
+ * @example
41
+ * // Extending with entity-specific statuses
42
+ * export enum VendorStatusEnum {
43
+ * // — base statuses —
44
+ * ACTIVE = BaseFlowStatusEnum.ACTIVE,
45
+ * INACTIVE = BaseFlowStatusEnum.INACTIVE,
46
+ * DEACTIVATED = BaseFlowStatusEnum.DEACTIVATED,
47
+ * CREATED = BaseFlowStatusEnum.CREATED,
48
+ * UPDATED = BaseFlowStatusEnum.UPDATED,
49
+ * DELETED = BaseFlowStatusEnum.DELETED,
50
+ * APPROVED = BaseFlowStatusEnum.APPROVED,
51
+ * REJECTED = BaseFlowStatusEnum.REJECTED,
52
+ * RESOLVED_REJECTED = BaseFlowStatusEnum.RESOLVED_REJECTED,
53
+ * CREATE_APPROVAL_PENDING = BaseFlowStatusEnum.CREATE_APPROVAL_PENDING,
54
+ * UPDATE_APPROVAL_PENDING = BaseFlowStatusEnum.UPDATE_APPROVAL_PENDING,
55
+ * DELETE_APPROVAL_PENDING = BaseFlowStatusEnum.DELETE_APPROVAL_PENDING,
56
+ * // — entity-specific additions —
57
+ * UNDER_REVIEW = "UNDER_REVIEW",
58
+ * SUBMITTED = "SUBMITTED",
59
+ * }
60
+ */
61
+ export declare enum BaseFlowStatusEnum {
62
+ ACTIVE = "ACTIVE",
63
+ INACTIVE = "INACTIVE",
64
+ DEACTIVATED = "DEACTIVATED",
65
+ CREATED = "CREATED",
66
+ UPDATED = "UPDATED",
67
+ DELETED = "DELETED",
68
+ APPROVED = "APPROVED",
69
+ REJECTED = "REJECTED",
70
+ RESOLVED_REJECTED = "RESOLVED_REJECTED",
71
+ CREATE_APPROVAL_PENDING = "CREATE_APPROVAL_PENDING",
72
+ UPDATE_APPROVAL_PENDING = "UPDATE_APPROVAL_PENDING",
73
+ DELETE_APPROVAL_PENDING = "DELETE_APPROVAL_PENDING"
74
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseFlowStatusEnum = exports.BaseFlowActionEnum = void 0;
4
+ /**
5
+ * Base action enum shared across all entity flow configs.
6
+ *
7
+ * Entity-specific action enums should re-use these values for common actions
8
+ * and declare additional values for entity-specific actions.
9
+ *
10
+ * @example
11
+ * // Extending with entity-specific actions
12
+ * export enum VendorActionEnum {
13
+ * // — base actions (re-declare to keep enum self-contained) —
14
+ * VIEW = BaseFlowActionEnum.VIEW,
15
+ * CREATE = BaseFlowActionEnum.CREATE,
16
+ * UPDATE = BaseFlowActionEnum.UPDATE,
17
+ * DELETE = BaseFlowActionEnum.DELETE,
18
+ * APPROVE = BaseFlowActionEnum.APPROVE,
19
+ * REJECT = BaseFlowActionEnum.REJECT,
20
+ * RECALL = BaseFlowActionEnum.RECALL,
21
+ * DEACTIVATE = BaseFlowActionEnum.DEACTIVATE,
22
+ * // — entity-specific additions —
23
+ * SUBMIT = "submit",
24
+ * ESCALATE = "escalate",
25
+ * }
26
+ */
27
+ var BaseFlowActionEnum;
28
+ (function (BaseFlowActionEnum) {
29
+ BaseFlowActionEnum["VIEW"] = "view";
30
+ BaseFlowActionEnum["CREATE"] = "create";
31
+ BaseFlowActionEnum["UPDATE"] = "update";
32
+ BaseFlowActionEnum["DELETE"] = "delete";
33
+ BaseFlowActionEnum["APPROVE"] = "approve";
34
+ BaseFlowActionEnum["REJECT"] = "reject";
35
+ BaseFlowActionEnum["RECALL"] = "recall";
36
+ BaseFlowActionEnum["DEACTIVATE"] = "deactivate";
37
+ })(BaseFlowActionEnum || (exports.BaseFlowActionEnum = BaseFlowActionEnum = {}));
38
+ /**
39
+ * Base status enum shared across all entity flow configs.
40
+ *
41
+ * Entity-specific status enums should re-use these values for common statuses
42
+ * and declare additional values for entity-specific statuses.
43
+ *
44
+ * @example
45
+ * // Extending with entity-specific statuses
46
+ * export enum VendorStatusEnum {
47
+ * // — base statuses —
48
+ * ACTIVE = BaseFlowStatusEnum.ACTIVE,
49
+ * INACTIVE = BaseFlowStatusEnum.INACTIVE,
50
+ * DEACTIVATED = BaseFlowStatusEnum.DEACTIVATED,
51
+ * CREATED = BaseFlowStatusEnum.CREATED,
52
+ * UPDATED = BaseFlowStatusEnum.UPDATED,
53
+ * DELETED = BaseFlowStatusEnum.DELETED,
54
+ * APPROVED = BaseFlowStatusEnum.APPROVED,
55
+ * REJECTED = BaseFlowStatusEnum.REJECTED,
56
+ * RESOLVED_REJECTED = BaseFlowStatusEnum.RESOLVED_REJECTED,
57
+ * CREATE_APPROVAL_PENDING = BaseFlowStatusEnum.CREATE_APPROVAL_PENDING,
58
+ * UPDATE_APPROVAL_PENDING = BaseFlowStatusEnum.UPDATE_APPROVAL_PENDING,
59
+ * DELETE_APPROVAL_PENDING = BaseFlowStatusEnum.DELETE_APPROVAL_PENDING,
60
+ * // — entity-specific additions —
61
+ * UNDER_REVIEW = "UNDER_REVIEW",
62
+ * SUBMITTED = "SUBMITTED",
63
+ * }
64
+ */
65
+ var BaseFlowStatusEnum;
66
+ (function (BaseFlowStatusEnum) {
67
+ BaseFlowStatusEnum["ACTIVE"] = "ACTIVE";
68
+ BaseFlowStatusEnum["INACTIVE"] = "INACTIVE";
69
+ BaseFlowStatusEnum["DEACTIVATED"] = "DEACTIVATED";
70
+ BaseFlowStatusEnum["CREATED"] = "CREATED";
71
+ BaseFlowStatusEnum["UPDATED"] = "UPDATED";
72
+ BaseFlowStatusEnum["DELETED"] = "DELETED";
73
+ BaseFlowStatusEnum["APPROVED"] = "APPROVED";
74
+ BaseFlowStatusEnum["REJECTED"] = "REJECTED";
75
+ BaseFlowStatusEnum["RESOLVED_REJECTED"] = "RESOLVED_REJECTED";
76
+ BaseFlowStatusEnum["CREATE_APPROVAL_PENDING"] = "CREATE_APPROVAL_PENDING";
77
+ BaseFlowStatusEnum["UPDATE_APPROVAL_PENDING"] = "UPDATE_APPROVAL_PENDING";
78
+ BaseFlowStatusEnum["DELETE_APPROVAL_PENDING"] = "DELETE_APPROVAL_PENDING";
79
+ })(BaseFlowStatusEnum || (exports.BaseFlowStatusEnum = BaseFlowStatusEnum = {}));
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Generic flow-config factory.
3
+ *
4
+ * Provides a reusable, type-safe `createActionConfig` helper for any entity
5
+ * flow configuration. Eliminates boilerplate type plumbing (ActionStatusMap,
6
+ * StateStatusForAction, createTransition) that would otherwise be duplicated
7
+ * in every flow config file.
8
+ *
9
+ * ---
10
+ * **Usage — basic**
11
+ * ```typescript
12
+ * import { createFlowConfigFactory } from "./base-flow-config.factory";
13
+ *
14
+ * const ACTION_MAP = {
15
+ * [MyActionEnum.APPROVE]: { statuses: [MyStatusEnum.APPROVED] as const, permissions: ["MY_APPROVE"] },
16
+ * [MyActionEnum.REJECT]: { statuses: [MyStatusEnum.REJECTED] as const, permissions: ["MY_REJECT"] },
17
+ * } satisfies ActionMap<MyActionEnum, MyStatusEnum>;
18
+ *
19
+ * const { createActionConfig } = createFlowConfigFactory<IMyContextData>()(ACTION_MAP);
20
+ *
21
+ * const transition = createActionConfig(MyStatusEnum.APPROVED, MyActionEnum.APPROVE);
22
+ * ```
23
+ *
24
+ * ---
25
+ * **Usage — overriding a transition permission**
26
+ * ```typescript
27
+ * createActionConfig(MyStatusEnum.APPROVED, MyActionEnum.APPROVE, ["CUSTOM_APPROVE_PERM"]);
28
+ * ```
29
+ *
30
+ * ---
31
+ * **Usage — context-driven (multi-outcome) transition**
32
+ * ```typescript
33
+ * createActionConfig(
34
+ * (ctx: IMyContextData) => ctx.fast ? MyStatusEnum.APPROVED : MyStatusEnum.PENDING,
35
+ * MyActionEnum.APPROVE,
36
+ * );
37
+ * ```
38
+ *
39
+ * ---
40
+ * **Usage — subset narrowing**
41
+ * Restrict the compiler to a subset of the action's possible target statuses:
42
+ * ```typescript
43
+ * createActionConfig<MyActionEnum.APPROVE, MyStatusEnum.APPROVED>(
44
+ * MyStatusEnum.APPROVED,
45
+ * MyActionEnum.APPROVE,
46
+ * );
47
+ * ```
48
+ *
49
+ * ---
50
+ * **Extending base enums**
51
+ * TypeScript enums cannot be inherited, but entity-specific enums can
52
+ * re-declare base values and add new ones:
53
+ * ```typescript
54
+ * import { BaseFlowActionEnum, BaseFlowStatusEnum } from "./base-flow-config.enums";
55
+ *
56
+ * export enum VendorActionEnum {
57
+ * VIEW = BaseFlowActionEnum.VIEW,
58
+ * CREATE = BaseFlowActionEnum.CREATE,
59
+ * UPDATE = BaseFlowActionEnum.UPDATE,
60
+ * DELETE = BaseFlowActionEnum.DELETE,
61
+ * APPROVE = BaseFlowActionEnum.APPROVE,
62
+ * REJECT = BaseFlowActionEnum.REJECT,
63
+ * RECALL = BaseFlowActionEnum.RECALL,
64
+ * DEACTIVATE = BaseFlowActionEnum.DEACTIVATE,
65
+ * SUBMIT = "submit", // ← extension
66
+ * }
67
+ *
68
+ * export enum VendorStatusEnum {
69
+ * ACTIVE = BaseFlowStatusEnum.ACTIVE,
70
+ * // ... all base statuses ...
71
+ * SUBMITTED = "SUBMITTED", // ← extension
72
+ * }
73
+ * ```
74
+ */
75
+ /**
76
+ * Shape of a single entry in the action map.
77
+ * `statuses` must be a `const` tuple so TypeScript preserves the exact union
78
+ * of reachable statuses for subset-narrowing in `createActionConfig`.
79
+ */
80
+ export type ActionMapEntry<S extends string> = {
81
+ readonly statuses: readonly S[];
82
+ readonly permissions: string[];
83
+ };
84
+ /**
85
+ * Full action map: one entry per action value.
86
+ * Use `satisfies ActionMap<MyActionEnum, MyStatusEnum>` on your map literal
87
+ * so that the compiler catches missing/misspelled keys while still preserving
88
+ * the precise `as const` tuple types for subset-narrowing.
89
+ *
90
+ * @example
91
+ * const ACTION_MAP = {
92
+ * [MyActionEnum.APPROVE]: { statuses: [MyStatusEnum.APPROVED] as const, permissions: ["MY_APPROVE"] },
93
+ * } satisfies ActionMap<MyActionEnum, MyStatusEnum>;
94
+ */
95
+ export type ActionMap<A extends string, S extends string> = {
96
+ readonly [key in A]: ActionMapEntry<S>;
97
+ };
98
+ /**
99
+ * Curried factory — call with the context-data type first, then pass the
100
+ * action map. This two-step pattern lets TypeScript infer the precise action
101
+ * map type (preserving `as const` tuple narrowing) while still allowing the
102
+ * caller to set the context-data type explicitly.
103
+ *
104
+ * @template CTX - Shape of the context object passed to function-based
105
+ * transition resolvers. Use `never` for flows where `next()`
106
+ * needs no runtime data (equivalent to `() => status`).
107
+ *
108
+ * @returns A function that accepts an `ActionMap` and returns `createActionConfig`.
109
+ */
110
+ export declare function createFlowConfigFactory<CTX = never>(): <A extends string, S extends string, AM extends ActionMap<A, S>>(actionMap: AM) => {
111
+ createActionConfig: <Act extends A, Subset extends { [key in A]: AM[key]["statuses"]; }[Act][number] = { [key in A]: AM[key]["statuses"]; }[Act][number]>(action: Act, nextStatus: Subset | ((context: CTX) => Subset), overridePermissions?: string[]) => {
112
+ permissions: string[];
113
+ next: (context: CTX) => Subset;
114
+ };
115
+ createTransition: <Act extends A, Subset_1 extends { [key in A]: AM[key]["statuses"]; }[Act][number] = { [key in A]: AM[key]["statuses"]; }[Act][number]>(transition: Subset_1 | ((context: CTX) => Subset_1)) => (context: CTX) => Subset_1;
116
+ };
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Generic flow-config factory.
4
+ *
5
+ * Provides a reusable, type-safe `createActionConfig` helper for any entity
6
+ * flow configuration. Eliminates boilerplate type plumbing (ActionStatusMap,
7
+ * StateStatusForAction, createTransition) that would otherwise be duplicated
8
+ * in every flow config file.
9
+ *
10
+ * ---
11
+ * **Usage — basic**
12
+ * ```typescript
13
+ * import { createFlowConfigFactory } from "./base-flow-config.factory";
14
+ *
15
+ * const ACTION_MAP = {
16
+ * [MyActionEnum.APPROVE]: { statuses: [MyStatusEnum.APPROVED] as const, permissions: ["MY_APPROVE"] },
17
+ * [MyActionEnum.REJECT]: { statuses: [MyStatusEnum.REJECTED] as const, permissions: ["MY_REJECT"] },
18
+ * } satisfies ActionMap<MyActionEnum, MyStatusEnum>;
19
+ *
20
+ * const { createActionConfig } = createFlowConfigFactory<IMyContextData>()(ACTION_MAP);
21
+ *
22
+ * const transition = createActionConfig(MyStatusEnum.APPROVED, MyActionEnum.APPROVE);
23
+ * ```
24
+ *
25
+ * ---
26
+ * **Usage — overriding a transition permission**
27
+ * ```typescript
28
+ * createActionConfig(MyStatusEnum.APPROVED, MyActionEnum.APPROVE, ["CUSTOM_APPROVE_PERM"]);
29
+ * ```
30
+ *
31
+ * ---
32
+ * **Usage — context-driven (multi-outcome) transition**
33
+ * ```typescript
34
+ * createActionConfig(
35
+ * (ctx: IMyContextData) => ctx.fast ? MyStatusEnum.APPROVED : MyStatusEnum.PENDING,
36
+ * MyActionEnum.APPROVE,
37
+ * );
38
+ * ```
39
+ *
40
+ * ---
41
+ * **Usage — subset narrowing**
42
+ * Restrict the compiler to a subset of the action's possible target statuses:
43
+ * ```typescript
44
+ * createActionConfig<MyActionEnum.APPROVE, MyStatusEnum.APPROVED>(
45
+ * MyStatusEnum.APPROVED,
46
+ * MyActionEnum.APPROVE,
47
+ * );
48
+ * ```
49
+ *
50
+ * ---
51
+ * **Extending base enums**
52
+ * TypeScript enums cannot be inherited, but entity-specific enums can
53
+ * re-declare base values and add new ones:
54
+ * ```typescript
55
+ * import { BaseFlowActionEnum, BaseFlowStatusEnum } from "./base-flow-config.enums";
56
+ *
57
+ * export enum VendorActionEnum {
58
+ * VIEW = BaseFlowActionEnum.VIEW,
59
+ * CREATE = BaseFlowActionEnum.CREATE,
60
+ * UPDATE = BaseFlowActionEnum.UPDATE,
61
+ * DELETE = BaseFlowActionEnum.DELETE,
62
+ * APPROVE = BaseFlowActionEnum.APPROVE,
63
+ * REJECT = BaseFlowActionEnum.REJECT,
64
+ * RECALL = BaseFlowActionEnum.RECALL,
65
+ * DEACTIVATE = BaseFlowActionEnum.DEACTIVATE,
66
+ * SUBMIT = "submit", // ← extension
67
+ * }
68
+ *
69
+ * export enum VendorStatusEnum {
70
+ * ACTIVE = BaseFlowStatusEnum.ACTIVE,
71
+ * // ... all base statuses ...
72
+ * SUBMITTED = "SUBMITTED", // ← extension
73
+ * }
74
+ * ```
75
+ */
76
+ Object.defineProperty(exports, "__esModule", { value: true });
77
+ exports.createFlowConfigFactory = createFlowConfigFactory;
78
+ /**
79
+ * Curried factory — call with the context-data type first, then pass the
80
+ * action map. This two-step pattern lets TypeScript infer the precise action
81
+ * map type (preserving `as const` tuple narrowing) while still allowing the
82
+ * caller to set the context-data type explicitly.
83
+ *
84
+ * @template CTX - Shape of the context object passed to function-based
85
+ * transition resolvers. Use `never` for flows where `next()`
86
+ * needs no runtime data (equivalent to `() => status`).
87
+ *
88
+ * @returns A function that accepts an `ActionMap` and returns `createActionConfig`.
89
+ */
90
+ function createFlowConfigFactory() {
91
+ return function (actionMap) {
92
+ const createTransition = (transition) => (context) => {
93
+ if (typeof transition === "function") {
94
+ return transition(context);
95
+ }
96
+ return transition;
97
+ };
98
+ /**
99
+ * Builds a single typed action-config entry for use inside a
100
+ * `FlowConfig` status block.
101
+ *
102
+ * @param nextStatus Fixed target status, or a function `(ctx) => status`
103
+ * for context-driven transitions.
104
+ * @param action The action this config is for (used to look up
105
+ * default permissions from `actionMap`).
106
+ * @param overridePermissions Optional permission list that replaces the
107
+ * default from `actionMap[action].permissions`.
108
+ *
109
+ * @typeParam Act Specific action enum member (narrows `StatusForAction`).
110
+ * @typeParam Subset Subset of reachable statuses to enforce at this
111
+ * (currentStatus, action) pair. Must be a subtype of
112
+ * `StatusForAction<Act>`.
113
+ */
114
+ const createActionConfig = (action, nextStatus, overridePermissions) => ({
115
+ permissions: overridePermissions !== null && overridePermissions !== void 0 ? overridePermissions : actionMap[action].permissions,
116
+ next: createTransition(nextStatus),
117
+ });
118
+ return { createActionConfig, createTransition };
119
+ };
120
+ }
@@ -0,0 +1,6 @@
1
+ import { FlowConfig } from "./flow-config.type";
2
+ import { LeaveApprovalActionEnum } from "../../api";
3
+ import { LeaveApprovalStatusEnum } from "../enums/leave_approval_status_enum";
4
+ export interface ILeaveApprovalFlowConfigContextData {
5
+ }
6
+ export declare const leaveApprovalFlowConfig: FlowConfig<LeaveApprovalStatusEnum, LeaveApprovalActionEnum, ILeaveApprovalFlowConfigContextData>;
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.leaveApprovalFlowConfig = void 0;
4
+ const api_1 = require("../../api");
5
+ const leave_approval_status_enum_1 = require("../enums/leave_approval_status_enum");
6
+ const base_flow_config_factory_1 = require("./base-flow-config.factory");
7
+ const LEAVE_APPROVAL_CREATE_PERMISSION = ["LEAVE_APPROVAL_CREATE"];
8
+ const LEAVE_APPROVAL_UPDATE_PERMISSION = ["LEAVE_APPROVAL_UPDATE"];
9
+ const LEAVE_APPROVAL_DELETE_PERMISSION = ["LEAVE_APPROVAL_DELETE"];
10
+ const LEAVE_APPROVAL_APPROVE_PERMISSION = ["LEAVE_APPROVAL_APPROVE"];
11
+ const LEAVE_APPROVAL_REJECT_PERMISSION = ["LEAVE_APPROVAL_REJECT"];
12
+ const LEAVE_APPROVAL_RECALL_PERMISSION = ["LEAVE_APPROVAL_RECALL"];
13
+ const LEAVE_APPROVAL_DEACTIVATE_PERMISSION = ["LEAVE_APPROVAL_DEACTIVATE"];
14
+ const ACTION_MAP = {
15
+ [api_1.LeaveApprovalActionEnum.CREATE]: {
16
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED],
17
+ permissions: LEAVE_APPROVAL_CREATE_PERMISSION,
18
+ },
19
+ [api_1.LeaveApprovalActionEnum.UPDATE]: {
20
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING],
21
+ permissions: LEAVE_APPROVAL_UPDATE_PERMISSION,
22
+ },
23
+ [api_1.LeaveApprovalActionEnum.DELETE]: {
24
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED],
25
+ permissions: LEAVE_APPROVAL_DELETE_PERMISSION,
26
+ },
27
+ [api_1.LeaveApprovalActionEnum.APPROVE]: {
28
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED],
29
+ permissions: LEAVE_APPROVAL_APPROVE_PERMISSION,
30
+ },
31
+ [api_1.LeaveApprovalActionEnum.REJECT]: {
32
+ statuses: [
33
+ leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED,
34
+ leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED,
35
+ leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED,
36
+ leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED,
37
+ leave_approval_status_enum_1.LeaveApprovalStatusEnum.RESOLVED_REJECTED,
38
+ ],
39
+ permissions: LEAVE_APPROVAL_REJECT_PERMISSION,
40
+ },
41
+ [api_1.LeaveApprovalActionEnum.RECALL]: {
42
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED],
43
+ permissions: LEAVE_APPROVAL_RECALL_PERMISSION,
44
+ },
45
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: {
46
+ statuses: [leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED],
47
+ permissions: LEAVE_APPROVAL_DEACTIVATE_PERMISSION,
48
+ },
49
+ };
50
+ const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(ACTION_MAP);
51
+ // DEACTIVATED status transitions
52
+ const transitionDeactivatedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
53
+ const transitionDeactivatedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
54
+ const transitionDeactivatedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
55
+ const transitionDeactivatedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
56
+ const transitionDeactivatedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
57
+ const transitionDeactivatedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
58
+ const transitionDeactivatedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
59
+ // CREATED status transitions
60
+ const transitionCreatedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
61
+ const transitionCreatedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED);
62
+ const transitionCreatedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
63
+ const transitionCreatedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
64
+ const transitionCreatedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
65
+ const transitionCreatedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
66
+ const transitionCreatedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
67
+ // UPDATED status transitions
68
+ const transitionUpdatedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
69
+ const transitionUpdatedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
70
+ const transitionUpdatedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
71
+ const transitionUpdatedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
72
+ const transitionUpdatedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
73
+ const transitionUpdatedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
74
+ const transitionUpdatedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
75
+ // DELETED status transitions
76
+ const transitionDeletedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
77
+ const transitionDeletedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
78
+ const transitionDeletedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
79
+ const transitionDeletedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
80
+ const transitionDeletedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
81
+ const transitionDeletedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
82
+ const transitionDeletedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
83
+ // APPROVED status transitions
84
+ const transitionApprovedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
85
+ const transitionApprovedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
86
+ const transitionApprovedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
87
+ const transitionApprovedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
88
+ const transitionApprovedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
89
+ const transitionApprovedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
90
+ const transitionApprovedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
91
+ // REJECTED status transitions
92
+ const transitionRejectedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
93
+ const transitionRejectedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
94
+ const transitionRejectedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
95
+ const transitionRejectedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
96
+ const transitionRejectedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
97
+ const transitionRejectedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
98
+ const transitionRejectedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
99
+ // CREATE_APPROVAL_PENDING status transitions
100
+ const transitionCreateApprovalPendingStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
101
+ const transitionCreateApprovalPendingStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
102
+ const transitionCreateApprovalPendingStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED);
103
+ const transitionCreateApprovalPendingStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
104
+ const transitionCreateApprovalPendingStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
105
+ const transitionCreateApprovalPendingStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
106
+ const transitionCreateApprovalPendingStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
107
+ // UPDATE_APPROVAL_PENDING status transitions
108
+ const transitionUpdateApprovalPendingStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
109
+ const transitionUpdateApprovalPendingStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
110
+ const transitionUpdateApprovalPendingStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
111
+ const transitionUpdateApprovalPendingStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
112
+ const transitionUpdateApprovalPendingStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
113
+ const transitionUpdateApprovalPendingStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
114
+ const transitionUpdateApprovalPendingStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
115
+ // DELETE_APPROVAL_PENDING status transitions
116
+ const transitionDeleteApprovalPendingStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING);
117
+ const transitionDeleteApprovalPendingStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING);
118
+ const transitionDeleteApprovalPendingStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING);
119
+ const transitionDeleteApprovalPendingStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED);
120
+ const transitionDeleteApprovalPendingStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
121
+ const transitionDeleteApprovalPendingStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
122
+ const transitionDeleteApprovalPendingStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
123
+ // RESOLVED_REJECTED status transitions
124
+ const transitionResolvedRejectedStatusCreateAction = createActionConfig(api_1.LeaveApprovalActionEnum.CREATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED);
125
+ const transitionResolvedRejectedStatusUpdateAction = createActionConfig(api_1.LeaveApprovalActionEnum.UPDATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED);
126
+ const transitionResolvedRejectedStatusDeleteAction = createActionConfig(api_1.LeaveApprovalActionEnum.DELETE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED);
127
+ const transitionResolvedRejectedStatusApproveAction = createActionConfig(api_1.LeaveApprovalActionEnum.APPROVE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED);
128
+ const transitionResolvedRejectedStatusRejectAction = createActionConfig(api_1.LeaveApprovalActionEnum.REJECT, leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED);
129
+ const transitionResolvedRejectedStatusRecallAction = createActionConfig(api_1.LeaveApprovalActionEnum.RECALL, leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED);
130
+ const transitionResolvedRejectedStatusDeactivateAction = createActionConfig(api_1.LeaveApprovalActionEnum.DEACTIVATE, leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED);
131
+ exports.leaveApprovalFlowConfig = {
132
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED]: {
133
+ actions: {
134
+ // [LeaveApprovalActionEnum.CREATE]: transitionDeactivatedStatusCreateAction,
135
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionDeactivatedStatusUpdateAction,
136
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionDeactivatedStatusDeleteAction,
137
+ // [LeaveApprovalActionEnum.APPROVE]: transitionDeactivatedStatusApproveAction,
138
+ // [LeaveApprovalActionEnum.REJECT]: transitionDeactivatedStatusRejectAction,
139
+ // [LeaveApprovalActionEnum.RECALL]: transitionDeactivatedStatusRecallAction,
140
+ // [LeaveApprovalActionEnum.DEACTIVATE]: transitionDeactivatedStatusDeactivateAction,
141
+ },
142
+ },
143
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATED]: {
144
+ actions: {
145
+ // [LeaveApprovalActionEnum.CREATE]: transitionCreatedStatusCreateAction,
146
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionCreatedStatusUpdateAction,
147
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionCreatedStatusDeleteAction,
148
+ // [LeaveApprovalActionEnum.APPROVE]: transitionCreatedStatusApproveAction,
149
+ // [LeaveApprovalActionEnum.REJECT]: transitionCreatedStatusRejectAction,
150
+ // [LeaveApprovalActionEnum.RECALL]: transitionCreatedStatusRecallAction,
151
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: transitionCreatedStatusDeactivateAction,
152
+ },
153
+ },
154
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATED]: {
155
+ actions: {
156
+ // [LeaveApprovalActionEnum.CREATE]: transitionUpdatedStatusCreateAction,
157
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionUpdatedStatusUpdateAction,
158
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionUpdatedStatusDeleteAction,
159
+ // [LeaveApprovalActionEnum.APPROVE]: transitionUpdatedStatusApproveAction,
160
+ // [LeaveApprovalActionEnum.REJECT]: transitionUpdatedStatusRejectAction,
161
+ // [LeaveApprovalActionEnum.RECALL]: transitionUpdatedStatusRecallAction,
162
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: transitionUpdatedStatusDeactivateAction,
163
+ },
164
+ },
165
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETED]: {
166
+ actions: {
167
+ // [LeaveApprovalActionEnum.VIEW]: transitionDeletedStatusViewAction,
168
+ // [LeaveApprovalActionEnum.CREATE]: transitionDeletedStatusCreateAction,
169
+ // [LeaveApprovalActionEnum.UPDATE]: transitionDeletedStatusUpdateAction,
170
+ // [LeaveApprovalActionEnum.DELETE]: transitionDeletedStatusDeleteAction,
171
+ // [LeaveApprovalActionEnum.APPROVE]: transitionDeletedStatusApproveAction,
172
+ // [LeaveApprovalActionEnum.REJECT]: transitionDeletedStatusRejectAction,
173
+ // [LeaveApprovalActionEnum.RECALL]: transitionDeletedStatusRecallAction,
174
+ // [LeaveApprovalActionEnum.DEACTIVATE]: transitionDeletedStatusDeactivateAction,
175
+ },
176
+ },
177
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.APPROVED]: {
178
+ actions: {
179
+ // [LeaveApprovalActionEnum.CREATE]: transitionApprovedStatusCreateAction,
180
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionApprovedStatusUpdateAction,
181
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionApprovedStatusDeleteAction,
182
+ // [LeaveApprovalActionEnum.APPROVE]: transitionApprovedStatusApproveAction,
183
+ // [LeaveApprovalActionEnum.REJECT]: transitionApprovedStatusRejectAction,
184
+ // [LeaveApprovalActionEnum.RECALL]: transitionApprovedStatusRecallAction,
185
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: transitionApprovedStatusDeactivateAction,
186
+ },
187
+ },
188
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.REJECTED]: {
189
+ actions: {
190
+ // [LeaveApprovalActionEnum.CREATE]: transitionRejectedStatusCreateAction,
191
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionRejectedStatusUpdateAction,
192
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionRejectedStatusDeleteAction,
193
+ // [LeaveApprovalActionEnum.APPROVE]: transitionRejectedStatusApproveAction,
194
+ // [LeaveApprovalActionEnum.REJECT]: transitionRejectedStatusRejectAction,
195
+ // [LeaveApprovalActionEnum.RECALL]: transitionRejectedStatusRecallAction,
196
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: transitionRejectedStatusDeactivateAction,
197
+ },
198
+ },
199
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.CREATE_APPROVAL_PENDING]: {
200
+ actions: {
201
+ // [LeaveApprovalActionEnum.CREATE]: transitionCreateApprovalPendingStatusCreateAction,
202
+ // [LeaveApprovalActionEnum.UPDATE]: transitionCreateApprovalPendingStatusUpdateAction,
203
+ // [LeaveApprovalActionEnum.DELETE]: transitionCreateApprovalPendingStatusDeleteAction,
204
+ [api_1.LeaveApprovalActionEnum.APPROVE]: transitionCreateApprovalPendingStatusApproveAction,
205
+ [api_1.LeaveApprovalActionEnum.REJECT]: transitionCreateApprovalPendingStatusRejectAction,
206
+ // [LeaveApprovalActionEnum.RECALL]: transitionCreateApprovalPendingStatusRecallAction,
207
+ // [LeaveApprovalActionEnum.DEACTIVATE]: transitionCreateApprovalPendingStatusDeactivateAction,
208
+ },
209
+ },
210
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.UPDATE_APPROVAL_PENDING]: {
211
+ actions: {
212
+ // [LeaveApprovalActionEnum.CREATE]: transitionUpdateApprovalPendingStatusCreateAction,
213
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionUpdateApprovalPendingStatusUpdateAction,
214
+ // [LeaveApprovalActionEnum.DELETE]: transitionUpdateApprovalPendingStatusDeleteAction,
215
+ [api_1.LeaveApprovalActionEnum.APPROVE]: transitionUpdateApprovalPendingStatusApproveAction,
216
+ [api_1.LeaveApprovalActionEnum.REJECT]: transitionUpdateApprovalPendingStatusRejectAction,
217
+ [api_1.LeaveApprovalActionEnum.RECALL]: transitionUpdateApprovalPendingStatusRecallAction,
218
+ // [LeaveApprovalActionEnum.DEACTIVATE]: transitionUpdateApprovalPendingStatusDeactivateAction,
219
+ },
220
+ },
221
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.DELETE_APPROVAL_PENDING]: {
222
+ actions: {
223
+ // [LeaveApprovalActionEnum.CREATE]: transitionDeleteApprovalPendingStatusCreateAction,
224
+ // [LeaveApprovalActionEnum.UPDATE]: transitionDeleteApprovalPendingStatusUpdateAction,
225
+ // [LeaveApprovalActionEnum.DELETE]: transitionDeleteApprovalPendingStatusDeleteAction,
226
+ [api_1.LeaveApprovalActionEnum.APPROVE]: transitionDeleteApprovalPendingStatusApproveAction,
227
+ [api_1.LeaveApprovalActionEnum.REJECT]: transitionDeleteApprovalPendingStatusRejectAction,
228
+ [api_1.LeaveApprovalActionEnum.RECALL]: transitionDeleteApprovalPendingStatusRecallAction,
229
+ // [LeaveApprovalActionEnum.DEACTIVATE]: transitionDeleteApprovalPendingStatusDeactivateAction,
230
+ },
231
+ },
232
+ [leave_approval_status_enum_1.LeaveApprovalStatusEnum.RESOLVED_REJECTED]: {
233
+ actions: {
234
+ // [LeaveApprovalActionEnum.CREATE]: transitionResolvedRejectedStatusCreateAction,
235
+ [api_1.LeaveApprovalActionEnum.UPDATE]: transitionResolvedRejectedStatusUpdateAction,
236
+ [api_1.LeaveApprovalActionEnum.DELETE]: transitionResolvedRejectedStatusDeleteAction,
237
+ // [LeaveApprovalActionEnum.APPROVE]: transitionResolvedRejectedStatusApproveAction,
238
+ // [LeaveApprovalActionEnum.REJECT]: transitionResolvedRejectedStatusRejectAction,
239
+ // [LeaveApprovalActionEnum.RECALL]: transitionResolvedRejectedStatusRecallAction,
240
+ [api_1.LeaveApprovalActionEnum.DEACTIVATE]: transitionResolvedRejectedStatusDeactivateAction,
241
+ },
242
+ },
243
+ };
@@ -217,3 +217,7 @@ export * from "./enums/entity_history_status_enum";
217
217
  export * from "./interface/entity_history.entity.interface";
218
218
  export * from "./flow-configs/entity_history_flow.config";
219
219
  export * from "./model/entity_history.entity.model";
220
+ export * from "./enums/leave_approval_status_enum";
221
+ export * from "./flow-configs/leave_approval_flow.config";
222
+ export * from "./interface/leave_approval.entity.interface";
223
+ export * from "./model/leave_approval.entity.model";
@@ -233,3 +233,7 @@ __exportStar(require("./enums/entity_history_status_enum"), exports);
233
233
  __exportStar(require("./interface/entity_history.entity.interface"), exports);
234
234
  __exportStar(require("./flow-configs/entity_history_flow.config"), exports);
235
235
  __exportStar(require("./model/entity_history.entity.model"), exports);
236
+ __exportStar(require("./enums/leave_approval_status_enum"), exports);
237
+ __exportStar(require("./flow-configs/leave_approval_flow.config"), exports);
238
+ __exportStar(require("./interface/leave_approval.entity.interface"), exports);
239
+ __exportStar(require("./model/leave_approval.entity.model"), exports);
@@ -36,6 +36,7 @@ import { HolidayListEntityModel } from "../model/holiday_list.entity.model";
36
36
  import { IndustryEntityModel } from "../model/industry.entity.model";
37
37
  import { IntermediaryBankEntityModel } from "../model/intermediary-bank.entity.model";
38
38
  import { LeaveEntityModel } from "../model/leave.entity.model";
39
+ import { LeaveApprovalEntityModel } from "../model/leave_approval.entity.model";
39
40
  import { LeaveCountVirtualEntityModel } from "../model/leave_count.entity.model";
40
41
  import { LeaveHistoryEntityModel } from "../model/leave_history.entity.model";
41
42
  import { OfficeLocationEntityModel } from "../model/office_location.entity.model";
@@ -103,6 +104,7 @@ import { IHolidayEntity } from "./holiday.entity.interface";
103
104
  import { IIndustryEntity } from "./industry.entity.interface";
104
105
  import { IIntermediaryBankEntity } from "./intermediary_bank.entity.interface";
105
106
  import { ILeaveCountVirtualEntity, ILeaveEntity } from "./leave.entity.interface";
107
+ import { ILeaveApprovalEntity } from "./leave_approval.entity.interface";
106
108
  import { ILeaveHistoryEntity } from "./leave_history.entity.interface";
107
109
  import { IOfficeLocationEntity } from "./office.location.entity";
108
110
  import { IOrganizationEntity } from "./organization.entity.interface";
@@ -240,7 +242,8 @@ export declare enum EntityEnum {
240
242
  VENDOR_HISTORY = "vendor_history",
241
243
  CLIENT_QUOTE = "client_quote",
242
244
  CLIENT_QUOTE_RATE = "client_quote_rate",
243
- ENTITY_HISTORY = "entity_history"
245
+ ENTITY_HISTORY = "entity_history",
246
+ LEAVE_APPROVAL = "leave_approval"
244
247
  }
245
248
  export type EntityRelations = {
246
249
  [K in EntityEnum | VirtualEntityEnum]: K;
@@ -265,7 +268,7 @@ export type IBaseEntityApiResponse<T> = {
265
268
  [key in EntityEnum | VirtualEntityEnum]?: AggregationFields<EnumToModel<key>>[];
266
269
  };
267
270
  };
268
- export type EnumEntityType<T extends EntityEnum | VirtualEntityEnum> = (T extends EntityEnum.BILLING ? IBillingEntity : T extends EntityEnum.BILLING_HISTORY ? IBillingHistoryEntity : T extends EntityEnum.BILLING_TIMESHEET ? IBillingTimesheetEntity : T extends EntityEnum.BILLING_REIMBURSEMENT_EXPENSE ? IBillingReimbursementExpenseEntity : T extends EntityEnum.BILLING_TIMESHEET_HISTORY ? IBillingTimesheetHistoryEntity : T extends EntityEnum.BILLING_REIMBURESMENT_EXPENSE_HISTORY ? IBillingReimbursementExpenseHistoryEntity : T extends EntityEnum.TIMESHEET ? ITimesheetEntity : T extends EntityEnum.USER ? IUserEntity : T extends EntityEnum.PROJECT ? IProjectEntity : T extends EntityEnum.CLIENT ? IClientEntity : T extends EntityEnum.LEAVE ? ILeaveEntity : T extends EntityEnum.BANK ? IBankEntity : T extends EntityEnum.BILLING_TRANSACTION ? IBillingTransactionEntity : T extends EntityEnum.BILLING_TRANSACTION_HISTORY ? IBillingTransactionHistoryEntity : T extends EntityEnum.CLIENT_AFFILIATE ? IClientAffiliateEntity : T extends EntityEnum.CONFIGURATION ? IConfigurationEntity : T extends EntityEnum.HOLIDAY ? IHolidayEntity : T extends EntityEnum.HOLIDAY_LIST ? IHolidayListEntity : T extends EntityEnum.COUNTRY ? ICountryEntity : T extends EntityEnum.EXPENSE_TYPE ? IExpenseTypeEntity : T extends EntityEnum.INDUSTRY ? IIndustryEntity : T extends EntityEnum.INTERMEDIARY_BANK ? IIntermediaryBankEntity : T extends EntityEnum.OFFICE_LOCATION ? IOfficeLocationEntity : T extends EntityEnum.PERMISSION ? IPermissionEntity : T extends EntityEnum.ROLE ? IRoleEntity : T extends EntityEnum.TASK ? ITaskEntity : T extends EntityEnum.DESIGNATION ? IDesignationEntity : T extends EntityEnum.RATE ? IRateEntity : T extends EntityEnum.REIMBURSEMENT ? IReimbursementEntity : T extends EntityEnum.REIMBURSEMENT_EXPENSE ? IReimbursementExpenseEntity : T extends EntityEnum.REIMBURSEMENT_HISTORY ? IReimbursementHistoryEntity : T extends EntityEnum.WORK_FROM_HOME ? IWorkFromHomeEntity : T extends EntityEnum.ORGANIZATION ? IOrganizationEntity : T extends EntityEnum.PROJECT_USER_MAPPING ? IProjectUserMappingEntity : T extends EntityEnum.CLIENT_USER_MAPPING ? IClientUserMappingEntity : T extends EntityEnum.CLIENT_INTRODUCING_MAPPING ? IClientIntroducingMappingEntity : T extends EntityEnum.TO_DO_LIST ? IToDoListEntity : T extends EntityEnum.CRON_JOBS ? ICronJobsEntity : T extends EntityEnum.ROLE_PERMISSION_MAPPING ? IRolePermissionMappingEntity : T extends EntityEnum.BANK_HISTORY ? IBankHistoryEntity : T extends VirtualEntityEnum.LEAVE_COUNT ? ILeaveCountVirtualEntity : T extends EntityEnum.LEAVE_HISTORY ? ILeaveHistoryEntity : T extends EntityEnum.WORK_FROM_HOME_HISTORY ? IWorkFromHomeHistoryEntity : T extends EntityEnum.TIMESHEET_HISTORY ? ITimesheetHistoryEntity : T extends EntityEnum.ADDRESS_BOOK ? IAddressBookEntity : T extends EntityEnum.STATE ? IStateEntity : T extends EntityEnum.GST_RATE ? IGstRateEntity : T extends EntityEnum.ORGANIZATION_TYPE ? IOrganizationTypeEntity : T extends EntityEnum.TDS_RATE ? ITdsRateEntity : T extends EntityEnum.ORGANIZATION_TYPE_TDS_RATE_MAPPING ? IOrganizationTypeTdsRateMappingEntity : T extends EntityEnum.VOUCHER_TYPE ? IVoucherTypeEntity : T extends EntityEnum.TDS_RATE_VOUCHER_TYPE_MAPPING ? ITdsRateVoucherTypeMappingEntity : T extends EntityEnum.EXPENSE_HEAD ? IExpenseHeadEntity : T extends EntityEnum.DOCUMENT_UPLOAD ? IDocumentUploadEntity : T extends EntityEnum.VENDOR ? IVendorEntity : T extends EntityEnum.VENDOR_INVOICE ? IVendorInvoiceEntity : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? IVendorInvoiceHistoryEntity : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? IVendorInvoiceHistoryEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM ? IVendorInvoiceItemEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? IVendorInvoiceItemHistoryEntity : T extends EntityEnum.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityEnum.WEBSITE_LEAD ? IWebsiteLeadEntity : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? IWebsiteNewsletterSubscriptionEntity : T extends EntityEnum.CLIENT_QUOTE ? IClientQuoteEntity : T extends EntityEnum.CLIENT_QUOTE_RATE ? IClientQuoteRateEntity : T extends EntityEnum.BILLING_PROFILE ? IBillingProfileEntity : T extends EntityEnum.PROJECT_REVENUE_SPLIT_MAPPING ? IProjectRevenueSplitMappingEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? IVendorInvoiceItemHistoryEntity : T extends EntityEnum.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityEnum.WEBSITE_LEAD ? IWebsiteLeadEntity : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? IWebsiteNewsletterSubscriptionEntity : T extends EntityEnum.CLIENT_QUOTE ? IClientQuoteEntity : T extends EntityEnum.CLIENT_QUOTE_RATE ? IClientQuoteRateEntity : T extends EntityEnum.ENTITY_HISTORY ? IEntityHistoryEntity : never) & {
271
+ export type EnumEntityType<T extends EntityEnum | VirtualEntityEnum> = (T extends EntityEnum.BILLING ? IBillingEntity : T extends EntityEnum.BILLING_HISTORY ? IBillingHistoryEntity : T extends EntityEnum.BILLING_TIMESHEET ? IBillingTimesheetEntity : T extends EntityEnum.BILLING_REIMBURSEMENT_EXPENSE ? IBillingReimbursementExpenseEntity : T extends EntityEnum.BILLING_TIMESHEET_HISTORY ? IBillingTimesheetHistoryEntity : T extends EntityEnum.BILLING_REIMBURESMENT_EXPENSE_HISTORY ? IBillingReimbursementExpenseHistoryEntity : T extends EntityEnum.TIMESHEET ? ITimesheetEntity : T extends EntityEnum.USER ? IUserEntity : T extends EntityEnum.PROJECT ? IProjectEntity : T extends EntityEnum.CLIENT ? IClientEntity : T extends EntityEnum.LEAVE ? ILeaveEntity : T extends EntityEnum.BANK ? IBankEntity : T extends EntityEnum.BILLING_TRANSACTION ? IBillingTransactionEntity : T extends EntityEnum.BILLING_TRANSACTION_HISTORY ? IBillingTransactionHistoryEntity : T extends EntityEnum.CLIENT_AFFILIATE ? IClientAffiliateEntity : T extends EntityEnum.CONFIGURATION ? IConfigurationEntity : T extends EntityEnum.HOLIDAY ? IHolidayEntity : T extends EntityEnum.HOLIDAY_LIST ? IHolidayListEntity : T extends EntityEnum.COUNTRY ? ICountryEntity : T extends EntityEnum.EXPENSE_TYPE ? IExpenseTypeEntity : T extends EntityEnum.INDUSTRY ? IIndustryEntity : T extends EntityEnum.INTERMEDIARY_BANK ? IIntermediaryBankEntity : T extends EntityEnum.OFFICE_LOCATION ? IOfficeLocationEntity : T extends EntityEnum.PERMISSION ? IPermissionEntity : T extends EntityEnum.ROLE ? IRoleEntity : T extends EntityEnum.TASK ? ITaskEntity : T extends EntityEnum.DESIGNATION ? IDesignationEntity : T extends EntityEnum.RATE ? IRateEntity : T extends EntityEnum.REIMBURSEMENT ? IReimbursementEntity : T extends EntityEnum.REIMBURSEMENT_EXPENSE ? IReimbursementExpenseEntity : T extends EntityEnum.REIMBURSEMENT_HISTORY ? IReimbursementHistoryEntity : T extends EntityEnum.WORK_FROM_HOME ? IWorkFromHomeEntity : T extends EntityEnum.ORGANIZATION ? IOrganizationEntity : T extends EntityEnum.PROJECT_USER_MAPPING ? IProjectUserMappingEntity : T extends EntityEnum.CLIENT_USER_MAPPING ? IClientUserMappingEntity : T extends EntityEnum.CLIENT_INTRODUCING_MAPPING ? IClientIntroducingMappingEntity : T extends EntityEnum.TO_DO_LIST ? IToDoListEntity : T extends EntityEnum.CRON_JOBS ? ICronJobsEntity : T extends EntityEnum.ROLE_PERMISSION_MAPPING ? IRolePermissionMappingEntity : T extends EntityEnum.BANK_HISTORY ? IBankHistoryEntity : T extends VirtualEntityEnum.LEAVE_COUNT ? ILeaveCountVirtualEntity : T extends EntityEnum.LEAVE_HISTORY ? ILeaveHistoryEntity : T extends EntityEnum.WORK_FROM_HOME_HISTORY ? IWorkFromHomeHistoryEntity : T extends EntityEnum.TIMESHEET_HISTORY ? ITimesheetHistoryEntity : T extends EntityEnum.ADDRESS_BOOK ? IAddressBookEntity : T extends EntityEnum.STATE ? IStateEntity : T extends EntityEnum.GST_RATE ? IGstRateEntity : T extends EntityEnum.ORGANIZATION_TYPE ? IOrganizationTypeEntity : T extends EntityEnum.TDS_RATE ? ITdsRateEntity : T extends EntityEnum.ORGANIZATION_TYPE_TDS_RATE_MAPPING ? IOrganizationTypeTdsRateMappingEntity : T extends EntityEnum.VOUCHER_TYPE ? IVoucherTypeEntity : T extends EntityEnum.TDS_RATE_VOUCHER_TYPE_MAPPING ? ITdsRateVoucherTypeMappingEntity : T extends EntityEnum.EXPENSE_HEAD ? IExpenseHeadEntity : T extends EntityEnum.DOCUMENT_UPLOAD ? IDocumentUploadEntity : T extends EntityEnum.VENDOR ? IVendorEntity : T extends EntityEnum.VENDOR_INVOICE ? IVendorInvoiceEntity : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? IVendorInvoiceHistoryEntity : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? IVendorInvoiceHistoryEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM ? IVendorInvoiceItemEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? IVendorInvoiceItemHistoryEntity : T extends EntityEnum.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityEnum.WEBSITE_LEAD ? IWebsiteLeadEntity : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? IWebsiteNewsletterSubscriptionEntity : T extends EntityEnum.CLIENT_QUOTE ? IClientQuoteEntity : T extends EntityEnum.CLIENT_QUOTE_RATE ? IClientQuoteRateEntity : T extends EntityEnum.BILLING_PROFILE ? IBillingProfileEntity : T extends EntityEnum.PROJECT_REVENUE_SPLIT_MAPPING ? IProjectRevenueSplitMappingEntity : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? IVendorInvoiceItemHistoryEntity : T extends EntityEnum.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityEnum.WEBSITE_LEAD ? IWebsiteLeadEntity : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? IWebsiteNewsletterSubscriptionEntity : T extends EntityEnum.CLIENT_QUOTE ? IClientQuoteEntity : T extends EntityEnum.CLIENT_QUOTE_RATE ? IClientQuoteRateEntity : T extends EntityEnum.ENTITY_HISTORY ? IEntityHistoryEntity : T extends EntityEnum.ENTITY_HISTORY ? IEntityHistoryEntity : T extends EntityEnum.LEAVE_APPROVAL ? ILeaveApprovalEntity : never) & {
269
272
  id: number;
270
273
  };
271
274
  export type EntityRelationConfig<T extends EntityEnum | VirtualEntityEnum> = {
@@ -391,7 +394,7 @@ export declare enum VirtualEntityEnum {
391
394
  }
392
395
  export type IHistoryConstraintSearchResponse<T> = IBaseResponse<IHistoryEntitySearchByConstraintResponse<T>[]>;
393
396
  export type IHistoryConstraintSearchServiceResponse<T> = IHistoryEntitySearchByConstraintResponse<T>[];
394
- export type EnumToModel<T extends EntityEnum | VirtualEntityEnum> = T extends EntityEnum.BILLING ? BillingEntityModel : T extends EntityEnum.BILLING_HISTORY ? BillingHistoryEntityModel : T extends EntityEnum.CLIENT ? ClientEntityModel : T extends EntityEnum.INTERMEDIARY_BANK ? IntermediaryBankEntityModel : T extends EntityEnum.PROJECT ? ProjectEntityModel : T extends EntityEnum.PROJECT_USER_MAPPING ? ProjectUserMappingEntityModel : T extends EntityEnum.REIMBURSEMENT ? ReimbursementEntityModel : T extends EntityEnum.REIMBURSEMENT_EXPENSE ? ReimbursementExpenseEntityModel : T extends EntityEnum.BILLING_REIMBURSEMENT_EXPENSE ? BillingReimbursementExpneseEntityModel : T extends EntityEnum.BILLING_REIMBURESMENT_EXPENSE_HISTORY ? BillingReimbursementExpenseHistoryEntityModel : T extends EntityEnum.LEAVE ? LeaveEntityModel : T extends EntityEnum.WORK_FROM_HOME ? WorkFromHomeEntityModel : T extends EntityEnum.HOLIDAY ? HolidayEntityModel : T extends VirtualEntityEnum.LEAVE_COUNT ? LeaveCountVirtualEntityModel : T extends EntityEnum.CLIENT_AFFILIATE ? ClientAffiliateEntityModel : T extends EntityEnum.BANK ? BankEntityModel : T extends EntityEnum.CONFIGURATION ? ConfigurationEntityModel : T extends EntityEnum.TASK ? TaskEntityModel : T extends EntityEnum.BILLING_TIMESHEET ? BillingTimesheetEntityModel : T extends EntityEnum.BILLING_TIMESHEET_HISTORY ? BillingTimesheetHistoryEntityModel : T extends EntityEnum.TIMESHEET ? TimesheetEntityModel : T extends EntityEnum.TIMESHEET_HISTORY ? TimesheetHistoryEntityModel : T extends EntityEnum.COUNTRY ? CountryEntityModel : T extends EntityEnum.BILLING_TRANSACTION ? BillingTransactionEntityModel : T extends EntityEnum.BILLING_TRANSACTION_HISTORY ? BillingTransactionHistoryEntityModel : T extends EntityEnum.ADDRESS_BOOK ? AddressBookEntityModel : T extends EntityEnum.STATE ? StateEntityModel : T extends EntityEnum.GST_RATE ? GstRateEntityModel : T extends EntityEnum.ORGANIZATION_TYPE ? OrganizationTypeEntityModel : T extends EntityEnum.TDS_RATE ? TdsRateEntityModel : T extends EntityEnum.ORGANIZATION_TYPE_TDS_RATE_MAPPING ? OrganizationTypeTdsRateMappingEntityModel : T extends EntityEnum.VOUCHER_TYPE ? VoucherTypeEntityModel : T extends EntityEnum.TDS_RATE_VOUCHER_TYPE_MAPPING ? TdsRateVoucherTypeMappingEntityModel : T extends EntityEnum.ORGANIZATION ? OrganizationEntityModel : T extends EntityEnum.INDUSTRY ? IndustryEntityModel : T extends EntityEnum.EXPENSE_TYPE ? ExpenseTypeEntityModel : T extends EntityEnum.DESIGNATION ? DesignationEntityModel : T extends EntityEnum.RATE ? RateEntityModel : T extends EntityEnum.ROLE ? RoleEntityModel : T extends EntityEnum.ROLE_PERMISSION_MAPPING ? RolePermissionMappingEntityModel : T extends EntityEnum.PERMISSION ? PermissionEntityModel : T extends EntityEnum.EXPENSE_HEAD ? ExpenseHeadEntityModel : T extends EntityEnum.DOCUMENT_UPLOAD ? DocumentUploadEntityModel : T extends EntityEnum.VENDOR ? VendorEntityModel : T extends EntityEnum.VENDOR_INVOICE ? VendorInvoiceEntityModel : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? VendorInvoiceHistoryEntityModel : T extends EntityEnum.OFFICE_LOCATION ? OfficeLocationEntityModel : T extends EntityEnum.VENDOR_INVOICE_ITEM ? VendorInvoiceItemEntityModel : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? VendorInvoiceItemHistoryEntityModel : T extends EntityEnum.VENDOR_HISTORY ? VendorHistoryEntityModel : T extends EntityEnum.WEBSITE_LEAD ? WebsiteLeadEntityModel : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? WebsiteNewsletterSubscriptionEntityModel : T extends EntityEnum.WORK_FROM_HOME_HISTORY ? WorkFromHomeHistoryEntityModel : T extends EntityEnum.LEAVE_HISTORY ? LeaveHistoryEntityModel : T extends EntityEnum.BANK_HISTORY ? BankHistoryEntityModel : T extends EntityEnum.REIMBURSEMENT_HISTORY ? ReimbursementHistoryEntityModel : T extends EntityEnum.CLIENT_USER_MAPPING ? ClientUserMappingEntityModel : T extends EntityEnum.CLIENT_INTRODUCING_MAPPING ? ClientIntroducingMappingEntityModel : T extends EntityEnum.HOLIDAY_LIST ? HolidayListEntityModel : T extends EntityEnum.CRON_JOBS ? CronJobsEntityModel : T extends EntityEnum.TO_DO_LIST ? ToDoListEntityModel : T extends EntityEnum.CLIENT_QUOTE ? ClientQuoteEntityModel : T extends EntityEnum.CLIENT_QUOTE_RATE ? ClientQuoteRateEntityModel : T extends EntityEnum.BILLING_PROFILE ? BillingProfileEntityModel : T extends EntityEnum.PROJECT_REVENUE_SPLIT_MAPPING ? ProjectRevenueSplitMappingEntityModel : T extends EntityEnum.WEBSITE_LEAD ? WebsiteLeadEntityModel : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? WebsiteNewsletterSubscriptionEntityModel : T extends EntityEnum.CLIENT_QUOTE ? ClientQuoteEntityModel : T extends EntityEnum.CLIENT_QUOTE_RATE ? ClientQuoteRateEntityModel : T extends EntityEnum.DESIGNATION ? DesignationEntityModel : T extends EntityEnum.RATE ? RateEntityModel : T extends EntityEnum.ENTITY_HISTORY ? EntityHistoryEntityModel : UserEntityModel;
397
+ export type EnumToModel<T extends EntityEnum | VirtualEntityEnum> = T extends EntityEnum.BILLING ? BillingEntityModel : T extends EntityEnum.BILLING_HISTORY ? BillingHistoryEntityModel : T extends EntityEnum.CLIENT ? ClientEntityModel : T extends EntityEnum.INTERMEDIARY_BANK ? IntermediaryBankEntityModel : T extends EntityEnum.PROJECT ? ProjectEntityModel : T extends EntityEnum.PROJECT_USER_MAPPING ? ProjectUserMappingEntityModel : T extends EntityEnum.REIMBURSEMENT ? ReimbursementEntityModel : T extends EntityEnum.REIMBURSEMENT_EXPENSE ? ReimbursementExpenseEntityModel : T extends EntityEnum.BILLING_REIMBURSEMENT_EXPENSE ? BillingReimbursementExpneseEntityModel : T extends EntityEnum.BILLING_REIMBURESMENT_EXPENSE_HISTORY ? BillingReimbursementExpenseHistoryEntityModel : T extends EntityEnum.LEAVE ? LeaveEntityModel : T extends EntityEnum.WORK_FROM_HOME ? WorkFromHomeEntityModel : T extends EntityEnum.HOLIDAY ? HolidayEntityModel : T extends VirtualEntityEnum.LEAVE_COUNT ? LeaveCountVirtualEntityModel : T extends EntityEnum.CLIENT_AFFILIATE ? ClientAffiliateEntityModel : T extends EntityEnum.BANK ? BankEntityModel : T extends EntityEnum.CONFIGURATION ? ConfigurationEntityModel : T extends EntityEnum.TASK ? TaskEntityModel : T extends EntityEnum.BILLING_TIMESHEET ? BillingTimesheetEntityModel : T extends EntityEnum.BILLING_TIMESHEET_HISTORY ? BillingTimesheetHistoryEntityModel : T extends EntityEnum.TIMESHEET ? TimesheetEntityModel : T extends EntityEnum.TIMESHEET_HISTORY ? TimesheetHistoryEntityModel : T extends EntityEnum.COUNTRY ? CountryEntityModel : T extends EntityEnum.BILLING_TRANSACTION ? BillingTransactionEntityModel : T extends EntityEnum.BILLING_TRANSACTION_HISTORY ? BillingTransactionHistoryEntityModel : T extends EntityEnum.ADDRESS_BOOK ? AddressBookEntityModel : T extends EntityEnum.STATE ? StateEntityModel : T extends EntityEnum.GST_RATE ? GstRateEntityModel : T extends EntityEnum.ORGANIZATION_TYPE ? OrganizationTypeEntityModel : T extends EntityEnum.TDS_RATE ? TdsRateEntityModel : T extends EntityEnum.ORGANIZATION_TYPE_TDS_RATE_MAPPING ? OrganizationTypeTdsRateMappingEntityModel : T extends EntityEnum.VOUCHER_TYPE ? VoucherTypeEntityModel : T extends EntityEnum.TDS_RATE_VOUCHER_TYPE_MAPPING ? TdsRateVoucherTypeMappingEntityModel : T extends EntityEnum.ORGANIZATION ? OrganizationEntityModel : T extends EntityEnum.INDUSTRY ? IndustryEntityModel : T extends EntityEnum.EXPENSE_TYPE ? ExpenseTypeEntityModel : T extends EntityEnum.DESIGNATION ? DesignationEntityModel : T extends EntityEnum.RATE ? RateEntityModel : T extends EntityEnum.ROLE ? RoleEntityModel : T extends EntityEnum.ROLE_PERMISSION_MAPPING ? RolePermissionMappingEntityModel : T extends EntityEnum.PERMISSION ? PermissionEntityModel : T extends EntityEnum.EXPENSE_HEAD ? ExpenseHeadEntityModel : T extends EntityEnum.DOCUMENT_UPLOAD ? DocumentUploadEntityModel : T extends EntityEnum.VENDOR ? VendorEntityModel : T extends EntityEnum.VENDOR_INVOICE ? VendorInvoiceEntityModel : T extends EntityEnum.VENDOR_INVOICE_HISTORY ? VendorInvoiceHistoryEntityModel : T extends EntityEnum.OFFICE_LOCATION ? OfficeLocationEntityModel : T extends EntityEnum.VENDOR_INVOICE_ITEM ? VendorInvoiceItemEntityModel : T extends EntityEnum.VENDOR_INVOICE_ITEM_HISTORY ? VendorInvoiceItemHistoryEntityModel : T extends EntityEnum.VENDOR_HISTORY ? VendorHistoryEntityModel : T extends EntityEnum.WEBSITE_LEAD ? WebsiteLeadEntityModel : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? WebsiteNewsletterSubscriptionEntityModel : T extends EntityEnum.WORK_FROM_HOME_HISTORY ? WorkFromHomeHistoryEntityModel : T extends EntityEnum.LEAVE_HISTORY ? LeaveHistoryEntityModel : T extends EntityEnum.BANK_HISTORY ? BankHistoryEntityModel : T extends EntityEnum.REIMBURSEMENT_HISTORY ? ReimbursementHistoryEntityModel : T extends EntityEnum.CLIENT_USER_MAPPING ? ClientUserMappingEntityModel : T extends EntityEnum.CLIENT_INTRODUCING_MAPPING ? ClientIntroducingMappingEntityModel : T extends EntityEnum.HOLIDAY_LIST ? HolidayListEntityModel : T extends EntityEnum.CRON_JOBS ? CronJobsEntityModel : T extends EntityEnum.TO_DO_LIST ? ToDoListEntityModel : T extends EntityEnum.CLIENT_QUOTE ? ClientQuoteEntityModel : T extends EntityEnum.CLIENT_QUOTE_RATE ? ClientQuoteRateEntityModel : T extends EntityEnum.BILLING_PROFILE ? BillingProfileEntityModel : T extends EntityEnum.PROJECT_REVENUE_SPLIT_MAPPING ? ProjectRevenueSplitMappingEntityModel : T extends EntityEnum.WEBSITE_LEAD ? WebsiteLeadEntityModel : T extends EntityEnum.WEBSITE_NEWSLETTER_SUBSCRIPTION ? WebsiteNewsletterSubscriptionEntityModel : T extends EntityEnum.CLIENT_QUOTE ? ClientQuoteEntityModel : T extends EntityEnum.CLIENT_QUOTE_RATE ? ClientQuoteRateEntityModel : T extends EntityEnum.DESIGNATION ? DesignationEntityModel : T extends EntityEnum.RATE ? RateEntityModel : T extends EntityEnum.ENTITY_HISTORY ? EntityHistoryEntityModel : T extends EntityEnum.ENTITY_HISTORY ? EntityHistoryEntityModel : T extends EntityEnum.LEAVE_APPROVAL ? LeaveApprovalEntityModel : UserEntityModel;
395
398
  export type EntityMap = {
396
399
  [key in EntityEnum | VirtualEntityEnum]: EnumToModel<key>[];
397
400
  } & {
@@ -99,6 +99,7 @@ var EntityEnum;
99
99
  EntityEnum["CLIENT_QUOTE"] = "client_quote";
100
100
  EntityEnum["CLIENT_QUOTE_RATE"] = "client_quote_rate";
101
101
  EntityEnum["ENTITY_HISTORY"] = "entity_history";
102
+ EntityEnum["LEAVE_APPROVAL"] = "leave_approval";
102
103
  })(EntityEnum || (exports.EntityEnum = EntityEnum = {}));
103
104
  var VirtualEntityEnum;
104
105
  (function (VirtualEntityEnum) {
@@ -0,0 +1,10 @@
1
+ import { IEntityAuditColumn } from "./entity-audit-columns.interface";
2
+ import { Nullable } from "./entity.utils.interface";
3
+ import { LeaveApprovalStatusEnum } from "../enums/leave_approval_status_enum";
4
+ export interface ILeaveApprovalEntity extends IEntityAuditColumn {
5
+ id: number;
6
+ leaveId: number;
7
+ approverId: number;
8
+ status: LeaveApprovalStatusEnum;
9
+ reason?: Nullable<string>;
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -43,6 +43,7 @@ const holiday_list_entity_model_1 = require("./holiday_list.entity.model");
43
43
  const industry_entity_model_1 = require("./industry.entity.model");
44
44
  const intermediary_bank_entity_model_1 = require("./intermediary-bank.entity.model");
45
45
  const leave_entity_model_1 = require("./leave.entity.model");
46
+ const leave_approval_entity_model_1 = require("./leave_approval.entity.model");
46
47
  const leave_count_entity_model_1 = require("./leave_count.entity.model");
47
48
  const leave_history_entity_model_1 = require("./leave_history.entity.model");
48
49
  const office_location_entity_model_1 = require("./office_location.entity.model");
@@ -174,6 +175,7 @@ exports.entityEnumToEntityModel = {
174
175
  [entity_utils_interface_1.EntityEnum.PROJECT_REVENUE_SPLIT_MAPPING]: project_revenue_split_mapping_model_1.ProjectRevenueSplitMappingEntityModel.fromEntity,
175
176
  [entity_utils_interface_1.EntityEnum.BILLING_PROFILE]: billing_profile_entity_model_1.BillingProfileEntityModel.fromEntity,
176
177
  [entity_utils_interface_1.EntityEnum.ENTITY_HISTORY]: entity_history_entity_model_1.EntityHistoryEntityModel.fromEntity,
178
+ [entity_utils_interface_1.EntityEnum.LEAVE_APPROVAL]: leave_approval_entity_model_1.LeaveApprovalEntityModel.fromEntity,
177
179
  };
178
180
  function entityMapToModels(entityMap) {
179
181
  for (const entityName in entityMap) {
@@ -9,6 +9,7 @@ import { ILeaveEntity } from "../interface/leave.entity.interface";
9
9
  import { RelationConfigs } from "../interface/relation-config.interface";
10
10
  import { BaseEntityModel } from "./base.entity.model";
11
11
  import { IRowActions } from "./interface/row-actions.interface";
12
+ import { LeaveApprovalEntityModel } from "./leave_approval.entity.model";
12
13
  import { LeaveCountVirtualEntityModel } from "./leave_count.entity.model";
13
14
  import { UserEntityModel } from "./user.entity.model";
14
15
  export declare class LeaveEntityModel extends BaseEntityModel<EntityEnum.LEAVE> implements ILeaveEntity {
@@ -29,6 +30,7 @@ export declare class LeaveEntityModel extends BaseEntityModel<EntityEnum.LEAVE>
29
30
  createdByUser?: UserEntityModel;
30
31
  updatedByUser?: UserEntityModel;
31
32
  user?: UserEntityModel;
33
+ leaveApprovals?: LeaveApprovalEntityModel[];
32
34
  static fromEntity(data: ILeaveEntity): LeaveEntityModel;
33
35
  getLeaveDuration(excludeWeekdays?: Weekday[], excludeDates?: DateCodeModel[]): number;
34
36
  static getLeaveDuration(leaves: LeaveEntityModel[], excludeWeekdays?: Weekday[], excludeDates?: DateCodeModel[], leaveStatusEnum?: LeaveStatusEnum[]): number;
@@ -42,7 +44,13 @@ export declare class LeaveEntityModel extends BaseEntityModel<EntityEnum.LEAVE>
42
44
  isHolidaySucceeds(holidays: DateCodeModel[]): boolean;
43
45
  isHolidayPrecedes(holidays: DateCodeModel[]): boolean;
44
46
  getRelationConfigs(): any[];
45
- static relationConfigs: RelationConfigs<[VirtualEntityEnum.LEAVE_COUNT, EntityEnum.USER, EntityEnum.USER, EntityEnum.USER], EntityEnum.LEAVE>;
47
+ static relationConfigs: RelationConfigs<[
48
+ VirtualEntityEnum.LEAVE_COUNT,
49
+ EntityEnum.USER,
50
+ EntityEnum.USER,
51
+ EntityEnum.USER,
52
+ EntityEnum.LEAVE_APPROVAL
53
+ ], EntityEnum.LEAVE>;
46
54
  static fromApiEntity(apiEntity: ILeaveEntity): LeaveEntityModel;
47
55
  static getPendingApprovalStatuses(): LeaveStatusEnum[];
48
56
  getStatusLabel(): string;
@@ -301,4 +301,13 @@ LeaveEntityModel.relationConfigs = [
301
301
  key: "employeeId",
302
302
  },
303
303
  },
304
+ {
305
+ name: entity_utils_interface_1.EntityEnum.LEAVE_APPROVAL,
306
+ relation: relation_type_enum_1.RelationType.MANY,
307
+ key: "leaveApprovals",
308
+ mapKeyConfig: {
309
+ relationKey: "leaveId",
310
+ key: "id",
311
+ },
312
+ },
304
313
  ];
@@ -0,0 +1,38 @@
1
+ import { EntityEnum } from "../interface/entity.utils.interface";
2
+ import { BaseEntityModel } from "./base.entity.model";
3
+ import { RelationConfigs } from "../interface/relation-config.interface";
4
+ import { IUserEntity } from "../interface/user.entity.interface";
5
+ import { IRowActions } from "./interface/row-actions.interface";
6
+ import { ILeaveApprovalEntity } from "../interface/leave_approval.entity.interface";
7
+ import { LeaveApprovalStatusEnum } from "../enums/leave_approval_status_enum";
8
+ import { LeaveEntityModel } from "./leave.entity.model";
9
+ import { UserEntityModel } from "./user.entity.model";
10
+ import { LeaveApprovalActionEnum } from "../../api";
11
+ import { ILeaveApprovalFlowConfigContextData } from "../flow-configs/leave_approval_flow.config";
12
+ export declare class LeaveApprovalEntityModel extends BaseEntityModel<EntityEnum.LEAVE_APPROVAL> implements ILeaveApprovalEntity {
13
+ id: number;
14
+ leaveId: number;
15
+ approverId: number;
16
+ reason?: string;
17
+ status: LeaveApprovalStatusEnum;
18
+ createdOn: number;
19
+ updatedOn: number;
20
+ createdBy: number;
21
+ updatedBy: number;
22
+ leave?: LeaveEntityModel;
23
+ user?: UserEntityModel;
24
+ static relationConfigs: RelationConfigs<[EntityEnum.LEAVE, EntityEnum.USER], EntityEnum.LEAVE_APPROVAL>;
25
+ static fromEntity(entity: ILeaveApprovalEntity): LeaveApprovalEntityModel;
26
+ getRelationConfigs(): any[];
27
+ getNextStatus(currentUser: IUserEntity, action: LeaveApprovalActionEnum, leaveApprovalFlowConfigContextData: ILeaveApprovalFlowConfigContextData): LeaveApprovalStatusEnum;
28
+ getAvailableActions(currentUser: UserEntityModel, config?: {
29
+ combinedActions?: Record<string, {
30
+ combineActions: LeaveApprovalActionEnum[];
31
+ label: string;
32
+ }>;
33
+ customLabels?: Partial<Record<LeaveApprovalActionEnum, string>>;
34
+ }): IRowActions<EntityEnum.LEAVE_APPROVAL>[];
35
+ getUpdateActionVisibility(currentUser: UserEntityModel): {
36
+ [key: string]: () => boolean;
37
+ };
38
+ }
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LeaveApprovalEntityModel = void 0;
4
+ const entity_utils_interface_1 = require("../interface/entity.utils.interface");
5
+ const base_entity_model_1 = require("./base.entity.model");
6
+ const relation_type_enum_1 = require("../enums/relation-type.enum");
7
+ const exceptions_1 = require("../../exceptions");
8
+ const error_key_enum_1 = require("../../enums/error.key.enum");
9
+ const utils_1 = require("../../utils");
10
+ const leave_approval_status_enum_1 = require("../enums/leave_approval_status_enum");
11
+ const leave_approval_flow_config_1 = require("../flow-configs/leave_approval_flow.config");
12
+ class LeaveApprovalEntityModel extends base_entity_model_1.BaseEntityModel {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.id = 0;
16
+ this.leaveId = 0;
17
+ this.approverId = 0;
18
+ this.status = leave_approval_status_enum_1.LeaveApprovalStatusEnum.DEACTIVATED;
19
+ this.createdOn = 0;
20
+ this.updatedOn = 0;
21
+ this.createdBy = 0;
22
+ this.updatedBy = 0;
23
+ }
24
+ static fromEntity(entity) {
25
+ const result = new LeaveApprovalEntityModel(entity_utils_interface_1.EntityEnum.LEAVE_APPROVAL);
26
+ Object.assign(result, entity);
27
+ return result;
28
+ }
29
+ getRelationConfigs() {
30
+ return this.constructor.prototype.constructor.relationConfigs || [];
31
+ }
32
+ getNextStatus(currentUser, action, leaveApprovalFlowConfigContextData) {
33
+ if (!this.status) {
34
+ throw new exceptions_1.AppBadRequestException({
35
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
36
+ message: [`Status not found: ${this.status}`],
37
+ });
38
+ }
39
+ const flowForStatus = leave_approval_flow_config_1.leaveApprovalFlowConfig[this.status];
40
+ if (!flowForStatus) {
41
+ throw new exceptions_1.AppBadRequestException({
42
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
43
+ message: [`No flow configuration found for status: ${this.status}`],
44
+ });
45
+ }
46
+ if (!action) {
47
+ throw new exceptions_1.AppBadRequestException({
48
+ key: error_key_enum_1.ErrorKeyEnum.ACTION_DATA,
49
+ message: ["actionData is required"],
50
+ });
51
+ }
52
+ const matchingPermissionConfig = flowForStatus.actions[action];
53
+ if (!matchingPermissionConfig) {
54
+ throw new exceptions_1.AppBadRequestException({
55
+ key: error_key_enum_1.ErrorKeyEnum.ACTION,
56
+ message: [`Action '${action}' is not valid for the current status.`],
57
+ });
58
+ }
59
+ if (!currentUser.permissions || currentUser.permissions.length === 0) {
60
+ throw new exceptions_1.AppBadRequestException({
61
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSIONS,
62
+ message: ["Permission not available for currentUser"],
63
+ });
64
+ }
65
+ const hasPermission = matchingPermissionConfig.permissions.some((permission) => currentUser.permissions.includes(permission));
66
+ if (!hasPermission) {
67
+ throw new exceptions_1.AppBadRequestException({
68
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSION,
69
+ message: [`Current user does not have permission to ${action} leaveApproval. Required permissions: ${matchingPermissionConfig.permissions.join(", ")}`],
70
+ });
71
+ }
72
+ const nextStatus = matchingPermissionConfig.next(leaveApprovalFlowConfigContextData);
73
+ return nextStatus;
74
+ }
75
+ getAvailableActions(currentUser, config) {
76
+ var _a;
77
+ const params = {
78
+ flowConfig: leave_approval_flow_config_1.leaveApprovalFlowConfig,
79
+ currentStatus: this.status,
80
+ userPermissions: (_a = currentUser.permissions) !== null && _a !== void 0 ? _a : [],
81
+ // visibilityData: this.getUpdateActionVisibility.bind(this, currentUser),
82
+ combinedActions: config === null || config === void 0 ? void 0 : config.combinedActions,
83
+ customLabels: config === null || config === void 0 ? void 0 : config.customLabels,
84
+ };
85
+ return utils_1.EntityActionFlowResolverV2.getAvailableActionsData(params);
86
+ }
87
+ getUpdateActionVisibility(currentUser) {
88
+ return {};
89
+ }
90
+ }
91
+ exports.LeaveApprovalEntityModel = LeaveApprovalEntityModel;
92
+ LeaveApprovalEntityModel.relationConfigs = [
93
+ {
94
+ name: entity_utils_interface_1.EntityEnum.LEAVE,
95
+ relation: relation_type_enum_1.RelationType.ONE,
96
+ key: "leave",
97
+ mapKeyConfig: {
98
+ relationKey: "id",
99
+ key: "leaveId",
100
+ },
101
+ },
102
+ {
103
+ name: entity_utils_interface_1.EntityEnum.USER,
104
+ relation: relation_type_enum_1.RelationType.ONE,
105
+ key: "user",
106
+ mapKeyConfig: {
107
+ relationKey: "id",
108
+ key: "approverId",
109
+ },
110
+ },
111
+ ];
@@ -3,6 +3,8 @@ import { EntityEnum, Nullable } from "../interface/entity.utils.interface";
3
3
  import { RelationConfigs } from "../interface/relation-config.interface";
4
4
  import { IUserEntity } from "../interface/user.entity.interface";
5
5
  import { BaseEntityModel } from "./base.entity.model";
6
+ import { ProjectUserMappingEntityModel } from "./project-user-mapping.entity.model";
7
+ import { ProjectEntityModel } from "./project.entity.model";
6
8
  import { RoleEntityModel } from "./role.entity.model";
7
9
  export declare class UserEntityModel extends BaseEntityModel<EntityEnum.USER> implements IUserEntity {
8
10
  id: number;
@@ -45,9 +47,11 @@ export declare class UserEntityModel extends BaseEntityModel<EntityEnum.USER> im
45
47
  createdOn: number;
46
48
  updatedOn: number;
47
49
  roleModel: RoleEntityModel;
48
- static relationConfigs: RelationConfigs<[EntityEnum.ROLE], EntityEnum.USER>;
50
+ projecUserMappings: ProjectUserMappingEntityModel[];
51
+ static relationConfigs: RelationConfigs<[EntityEnum.ROLE, EntityEnum.PROJECT_USER_MAPPING], EntityEnum.USER>;
49
52
  getRelationConfigs(): any[];
50
53
  static fromEntity(entity: IUserEntity): UserEntityModel;
51
54
  get roleEntityModel(): RoleEntityModel;
52
55
  hasPermission(permissionName: string): boolean;
56
+ get projects(): ProjectEntityModel[];
53
57
  }
@@ -28,6 +28,7 @@ class UserEntityModel extends base_entity_model_1.BaseEntityModel {
28
28
  // role key already exists on user entity
29
29
  // hence, name written as role model
30
30
  this.roleModel = {};
31
+ this.projecUserMappings = [];
31
32
  }
32
33
  getRelationConfigs() {
33
34
  return this.constructor.prototype.constructor.relationConfigs || [];
@@ -43,6 +44,9 @@ class UserEntityModel extends base_entity_model_1.BaseEntityModel {
43
44
  hasPermission(permissionName) {
44
45
  return this.roleEntityModel.rolePermissionEntityModels.some((model) => { var _a; return ((_a = model.permission) === null || _a === void 0 ? void 0 : _a.name) === permissionName; });
45
46
  }
47
+ get projects() {
48
+ return this.projecUserMappings.map((mapping) => mapping.project).filter((project) => !!project);
49
+ }
46
50
  }
47
51
  exports.UserEntityModel = UserEntityModel;
48
52
  UserEntityModel.relationConfigs = [
@@ -55,4 +59,13 @@ UserEntityModel.relationConfigs = [
55
59
  key: "role",
56
60
  },
57
61
  },
62
+ {
63
+ name: entity_utils_interface_1.EntityEnum.PROJECT_USER_MAPPING,
64
+ relation: relation_type_enum_1.RelationType.MANY,
65
+ key: "projecUserMappings",
66
+ mapKeyConfig: {
67
+ relationKey: "userId",
68
+ key: "id",
69
+ },
70
+ },
58
71
  ];
@@ -249,13 +249,16 @@ class EntityActionFlowResolverV2 {
249
249
  return [];
250
250
  }
251
251
  const actionConfig = (_b = (_a = entityFlowConfig[currentStatus]) === null || _a === void 0 ? void 0 : _a.actions) !== null && _b !== void 0 ? _b : {};
252
+ console.log("Available actions for status", currentStatus, Object.keys(actionConfig));
252
253
  return EntityActionFlowResolverV2._getPermittedActions(actionConfig, userPermissions, data);
253
254
  }
254
255
  static _getPermittedActions(actionConfig, userPermissions, data) {
256
+ console.log("Checking permitted actions with user permissions", userPermissions);
255
257
  return Object.entries(actionConfig)
256
258
  .filter(([actionKey, config]) => {
257
259
  var _a;
258
260
  const actionRequiredPermissions = (_a = config === null || config === void 0 ? void 0 : config.permissions) !== null && _a !== void 0 ? _a : [];
261
+ console.log(`Checking action ${actionKey} with required permissions ${actionRequiredPermissions.join(", ")} against user permissions`);
259
262
  const matchingPermissions = actionRequiredPermissions.filter((permission) => userPermissions.includes(permission));
260
263
  if (matchingPermissions.length > 1) {
261
264
  throw new Error(`Multiple permissions found for action ${actionKey}: ${matchingPermissions.join(", ")}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "law-common",
3
- "version": "10.75.0",
3
+ "version": "10.75.1-beta.10",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -17,7 +17,8 @@
17
17
  "test": "jest",
18
18
  "format": "prettier --write .",
19
19
  "check-format": "prettier --check .",
20
- "pull:link": "git pull && npm run link"
20
+ "pull:link": "git pull && npm run link",
21
+ "check-version": "npm view law-common versions --json | jq -r '.[-1]'"
21
22
  },
22
23
  "keywords": [],
23
24
  "author": "",