law-common 12.7.0 → 12.7.1-beta.0

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 (38) hide show
  1. package/README.md +1 -1
  2. package/dist/src/api/index.d.ts +4 -0
  3. package/dist/src/api/index.js +4 -0
  4. package/dist/src/api/interface/designation.create.dto.interface.d.ts +5 -0
  5. package/dist/src/api/interface/designation.create.dto.interface.js +2 -0
  6. package/dist/src/api/interface/designation.update.dto.interface.d.ts +17 -0
  7. package/dist/src/api/interface/designation.update.dto.interface.js +18 -0
  8. package/dist/src/api/interface/rate.create.dto.interface.d.ts +5 -0
  9. package/dist/src/api/interface/rate.create.dto.interface.js +2 -0
  10. package/dist/src/api/interface/rate.update.dto.interface.d.ts +17 -0
  11. package/dist/src/api/interface/rate.update.dto.interface.js +18 -0
  12. package/dist/src/entities/enums/designation_status_enum.d.ts +5 -0
  13. package/dist/src/entities/enums/designation_status_enum.js +9 -0
  14. package/dist/src/entities/enums/rate_status_enum.d.ts +5 -0
  15. package/dist/src/entities/enums/rate_status_enum.js +9 -0
  16. package/dist/src/entities/flow-configs/designation_flow.config.d.ts +6 -0
  17. package/dist/src/entities/flow-configs/designation_flow.config.js +70 -0
  18. package/dist/src/entities/flow-configs/rate_flow.config.d.ts +6 -0
  19. package/dist/src/entities/flow-configs/rate_flow.config.js +70 -0
  20. package/dist/src/entities/index.d.ts +6 -0
  21. package/dist/src/entities/index.js +6 -0
  22. package/dist/src/entities/interface/designation.entity.interface.d.ts +5 -3
  23. package/dist/src/entities/interface/designation.entity.interface.js +3 -3
  24. package/dist/src/entities/interface/entity.utils.interface.d.ts +1 -1
  25. package/dist/src/entities/interface/field-constraint/designation_field_constraints.interface.d.ts +13 -0
  26. package/dist/src/entities/interface/field-constraint/designation_field_constraints.interface.js +15 -0
  27. package/dist/src/entities/interface/field-constraint/rate_field_constraints.interface.d.ts +13 -0
  28. package/dist/src/entities/interface/field-constraint/rate_field_constraints.interface.js +12 -0
  29. package/dist/src/entities/interface/rate.entity.interface.d.ts +4 -2
  30. package/dist/src/entities/model/client_quote_rate.entity.model.d.ts +2 -2
  31. package/dist/src/entities/model/designation.entity.model.d.ts +26 -6
  32. package/dist/src/entities/model/designation.entity.model.js +91 -12
  33. package/dist/src/entities/model/entity.model.interface.js +2 -2
  34. package/dist/src/entities/model/rate.entity.model.d.ts +29 -6
  35. package/dist/src/entities/model/rate.entity.model.js +129 -4
  36. package/dist/src/entities/model/rate.model.d.ts +1 -21
  37. package/dist/src/entities/model/rate.model.js +50 -40
  38. package/package.json +1 -1
package/README.md CHANGED
@@ -1 +1 @@
1
- # law-common
1
+ # law-common
@@ -119,3 +119,7 @@ export * from "./interface/client_debit_note_particulars.create.dto.interface";
119
119
  export * from "./interface/client_debit_note_particulars.update.dto.interface";
120
120
  export * from "./interface/industry.create.dto.interface";
121
121
  export * from "./interface/industry.update.dto.interface";
122
+ export * from "./interface/rate.create.dto.interface";
123
+ export * from "./interface/rate.update.dto.interface";
124
+ export * from "./interface/designation.create.dto.interface";
125
+ export * from "./interface/designation.update.dto.interface";
@@ -139,3 +139,7 @@ __exportStar(require("./interface/client_debit_note_particulars.create.dto.inter
139
139
  __exportStar(require("./interface/client_debit_note_particulars.update.dto.interface"), exports);
140
140
  __exportStar(require("./interface/industry.create.dto.interface"), exports);
141
141
  __exportStar(require("./interface/industry.update.dto.interface"), exports);
142
+ __exportStar(require("./interface/rate.create.dto.interface"), exports);
143
+ __exportStar(require("./interface/rate.update.dto.interface"), exports);
144
+ __exportStar(require("./interface/designation.create.dto.interface"), exports);
145
+ __exportStar(require("./interface/designation.update.dto.interface"), exports);
@@ -0,0 +1,5 @@
1
+ import { IEntityCreateDto } from "../../entities";
2
+ import { IDesignationEntity } from "../../entities/interface/designation.entity.interface";
3
+ export type IDesignationCreateExclude = "description" | "order" | "status";
4
+ export interface IDesignationCreateDto extends Omit<IEntityCreateDto<IDesignationEntity>, IDesignationCreateExclude> {
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { DeepPartialButRequired } from "./api.utils.interface";
2
+ import { IDesignationCreateDto } from "./designation.create.dto.interface";
3
+ export type IDesignationUpdateDto = DeepPartialButRequired<IDesignationCreateDto, never> & {
4
+ actionData: IDesignationActionDataDto;
5
+ };
6
+ export interface IDesignationActionDataDto {
7
+ action: DesignationActionEnum;
8
+ remark?: string;
9
+ }
10
+ export declare enum DesignationActionEnum {
11
+ CREATE = "create",
12
+ UPDATE = "update",
13
+ DELETE = "delete",
14
+ DEACTIVATE = "deactivate",
15
+ ACTIVATE = "activate",
16
+ RESTORE = "restore"
17
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DesignationActionEnum = void 0;
4
+ var DesignationActionEnum;
5
+ (function (DesignationActionEnum) {
6
+ DesignationActionEnum["CREATE"] = "create";
7
+ DesignationActionEnum["UPDATE"] = "update";
8
+ DesignationActionEnum["DELETE"] = "delete";
9
+ DesignationActionEnum["DEACTIVATE"] = "deactivate";
10
+ DesignationActionEnum["ACTIVATE"] = "activate";
11
+ DesignationActionEnum["RESTORE"] = "restore";
12
+ // The following actions are for entity flow with approval process. Comment out if entity is automatically approved without approval process.
13
+ // REQUEST_CHANGES = "request_changes",
14
+ // REJECT = "reject",
15
+ // RECALL = "recall",
16
+ // APPROVE = "approve",
17
+ // CHANGES_DONE = "changes_done",
18
+ })(DesignationActionEnum || (exports.DesignationActionEnum = DesignationActionEnum = {}));
@@ -0,0 +1,5 @@
1
+ import { IEntityCreateDto } from "../../entities";
2
+ import { IRateEntity } from "../../entities/interface/rate.entity.interface";
3
+ export type IRateCreateExclude = "unit" | "status";
4
+ export interface IRateCreateDto extends Omit<IEntityCreateDto<IRateEntity>, IRateCreateExclude> {
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { DeepPartialButRequired } from "./api.utils.interface";
2
+ import { IRateCreateDto } from "./rate.create.dto.interface";
3
+ export type IRateUpdateDto = DeepPartialButRequired<IRateCreateDto, never> & {
4
+ actionData: IRateActionDataDto;
5
+ };
6
+ export interface IRateActionDataDto {
7
+ action: RateActionEnum;
8
+ remark?: string;
9
+ }
10
+ export declare enum RateActionEnum {
11
+ CREATE = "create",
12
+ UPDATE = "update",
13
+ DELETE = "delete",
14
+ DEACTIVATE = "deactivate",
15
+ ACTIVATE = "activate",
16
+ RESTORE = "restore"
17
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateActionEnum = void 0;
4
+ var RateActionEnum;
5
+ (function (RateActionEnum) {
6
+ RateActionEnum["CREATE"] = "create";
7
+ RateActionEnum["UPDATE"] = "update";
8
+ RateActionEnum["DELETE"] = "delete";
9
+ RateActionEnum["DEACTIVATE"] = "deactivate";
10
+ RateActionEnum["ACTIVATE"] = "activate";
11
+ RateActionEnum["RESTORE"] = "restore";
12
+ // The following actions are for entity flow with approval process. Comment out if entity is automatically approved without approval process.
13
+ // REQUEST_CHANGES = "request_changes",
14
+ // REJECT = "reject",
15
+ // RECALL = "recall",
16
+ // APPROVE = "approve",
17
+ // CHANGES_DONE = "changes_done",
18
+ })(RateActionEnum || (exports.RateActionEnum = RateActionEnum = {}));
@@ -0,0 +1,5 @@
1
+ export declare enum DesignationStatusEnum {
2
+ APPROVED = "APPROVED",
3
+ DEACTIVATED = "DEACTIVATED",
4
+ DELETED = "DELETED"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DesignationStatusEnum = void 0;
4
+ var DesignationStatusEnum;
5
+ (function (DesignationStatusEnum) {
6
+ DesignationStatusEnum["APPROVED"] = "APPROVED";
7
+ DesignationStatusEnum["DEACTIVATED"] = "DEACTIVATED";
8
+ DesignationStatusEnum["DELETED"] = "DELETED";
9
+ })(DesignationStatusEnum || (exports.DesignationStatusEnum = DesignationStatusEnum = {}));
@@ -0,0 +1,5 @@
1
+ export declare enum RateStatusEnum {
2
+ APPROVED = "APPROVED",
3
+ DEACTIVATED = "DEACTIVATED",
4
+ DELETED = "DELETED"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateStatusEnum = void 0;
4
+ var RateStatusEnum;
5
+ (function (RateStatusEnum) {
6
+ RateStatusEnum["APPROVED"] = "APPROVED";
7
+ RateStatusEnum["DEACTIVATED"] = "DEACTIVATED";
8
+ RateStatusEnum["DELETED"] = "DELETED";
9
+ })(RateStatusEnum || (exports.RateStatusEnum = RateStatusEnum = {}));
@@ -0,0 +1,6 @@
1
+ import { FlowConfig } from "./flow-config.type";
2
+ import { DesignationActionEnum } from "../../api";
3
+ import { DesignationStatusEnum } from "../enums/designation_status_enum";
4
+ export interface IDesignationFlowConfigContextData {
5
+ }
6
+ export declare const designationFlowConfig: FlowConfig<DesignationStatusEnum, DesignationActionEnum, IDesignationFlowConfigContextData>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.designationFlowConfig = void 0;
4
+ const base_flow_config_factory_1 = require("./base-flow-config.factory");
5
+ const api_1 = require("../../api");
6
+ const designation_status_enum_1 = require("../enums/designation_status_enum");
7
+ const DESIGNATION_CREATE_PERMISSION = ["DESIGNATION_CREATE"];
8
+ const DESIGNATION_UPDATE_PERMISSION = ["DESIGNATION_UPDATE"];
9
+ const DESIGNATION_DELETE_PERMISSION = ["DESIGNATION_DELETE"];
10
+ const DESIGNATION_DEACTIVATE_PERMISSION = ["DESIGNATION_DEACTIVATE"];
11
+ const DESIGNATION_ACTIVATE_PERMISSION = ["DESIGNATION_ACTIVATE"];
12
+ const DESIGNATION_RESTORE_PERMISSION = ["DESIGNATION_RESTORE"];
13
+ const ACTION_MAP = {
14
+ [api_1.DesignationActionEnum.CREATE]: {
15
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.APPROVED],
16
+ permissions: DESIGNATION_CREATE_PERMISSION,
17
+ },
18
+ [api_1.DesignationActionEnum.UPDATE]: {
19
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.APPROVED],
20
+ permissions: DESIGNATION_UPDATE_PERMISSION,
21
+ },
22
+ [api_1.DesignationActionEnum.DELETE]: {
23
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.DELETED],
24
+ permissions: DESIGNATION_DELETE_PERMISSION,
25
+ },
26
+ [api_1.DesignationActionEnum.DEACTIVATE]: {
27
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.DEACTIVATED],
28
+ permissions: DESIGNATION_DEACTIVATE_PERMISSION,
29
+ },
30
+ [api_1.DesignationActionEnum.ACTIVATE]: {
31
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.APPROVED],
32
+ permissions: DESIGNATION_ACTIVATE_PERMISSION,
33
+ },
34
+ [api_1.DesignationActionEnum.RESTORE]: {
35
+ reachableStatues: [designation_status_enum_1.DesignationStatusEnum.APPROVED],
36
+ permissions: DESIGNATION_RESTORE_PERMISSION,
37
+ },
38
+ };
39
+ const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(ACTION_MAP);
40
+ // APPROVED status transitions
41
+ const transitionApprovedStatusUpdateAction = createActionConfig(api_1.DesignationActionEnum.UPDATE, designation_status_enum_1.DesignationStatusEnum.APPROVED);
42
+ const transitionApprovedStatusDeleteAction = createActionConfig(api_1.DesignationActionEnum.DELETE, designation_status_enum_1.DesignationStatusEnum.DELETED);
43
+ const transitionApprovedStatusDeactivateAction = createActionConfig(api_1.DesignationActionEnum.DEACTIVATE, designation_status_enum_1.DesignationStatusEnum.DEACTIVATED);
44
+ // DEACTIVATED status transitions
45
+ const transitionDeactivatedStatusDeleteAction = createActionConfig(api_1.DesignationActionEnum.DELETE, designation_status_enum_1.DesignationStatusEnum.DELETED);
46
+ const transitionDeactivatedStatusActivateAction = createActionConfig(api_1.DesignationActionEnum.ACTIVATE, designation_status_enum_1.DesignationStatusEnum.APPROVED);
47
+ // DELETED status transitions
48
+ const transitionDeletedStatusUpdateAction = createActionConfig(api_1.DesignationActionEnum.UPDATE, designation_status_enum_1.DesignationStatusEnum.APPROVED);
49
+ const transitionDeletedStatusRestoreAction = createActionConfig(api_1.DesignationActionEnum.RESTORE, designation_status_enum_1.DesignationStatusEnum.APPROVED);
50
+ exports.designationFlowConfig = {
51
+ [designation_status_enum_1.DesignationStatusEnum.APPROVED]: {
52
+ actions: {
53
+ [api_1.DesignationActionEnum.UPDATE]: transitionApprovedStatusUpdateAction,
54
+ [api_1.DesignationActionEnum.DELETE]: transitionApprovedStatusDeleteAction,
55
+ [api_1.DesignationActionEnum.DEACTIVATE]: transitionApprovedStatusDeactivateAction,
56
+ },
57
+ },
58
+ [designation_status_enum_1.DesignationStatusEnum.DEACTIVATED]: {
59
+ actions: {
60
+ [api_1.DesignationActionEnum.DELETE]: transitionDeactivatedStatusDeleteAction,
61
+ [api_1.DesignationActionEnum.ACTIVATE]: transitionDeactivatedStatusActivateAction,
62
+ },
63
+ },
64
+ [designation_status_enum_1.DesignationStatusEnum.DELETED]: {
65
+ actions: {
66
+ [api_1.DesignationActionEnum.UPDATE]: transitionDeletedStatusUpdateAction,
67
+ [api_1.DesignationActionEnum.RESTORE]: transitionDeletedStatusRestoreAction,
68
+ },
69
+ },
70
+ };
@@ -0,0 +1,6 @@
1
+ import { FlowConfig } from "./flow-config.type";
2
+ import { RateActionEnum } from "../../api";
3
+ import { RateStatusEnum } from "../enums/rate_status_enum";
4
+ export interface IRateFlowConfigContextData {
5
+ }
6
+ export declare const rateFlowConfig: FlowConfig<RateStatusEnum, RateActionEnum, IRateFlowConfigContextData>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rateFlowConfig = void 0;
4
+ const base_flow_config_factory_1 = require("./base-flow-config.factory");
5
+ const api_1 = require("../../api");
6
+ const rate_status_enum_1 = require("../enums/rate_status_enum");
7
+ const RATE_CREATE_PERMISSION = ["RATE_CREATE"];
8
+ const RATE_UPDATE_PERMISSION = ["RATE_UPDATE"];
9
+ const RATE_DELETE_PERMISSION = ["RATE_DELETE"];
10
+ const RATE_DEACTIVATE_PERMISSION = ["RATE_DEACTIVATE"];
11
+ const RATE_ACTIVATE_PERMISSION = ["RATE_ACTIVATE"];
12
+ const RATE_RESTORE_PERMISSION = ["RATE_RESTORE"];
13
+ const ACTION_MAP = {
14
+ [api_1.RateActionEnum.CREATE]: {
15
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.APPROVED],
16
+ permissions: RATE_CREATE_PERMISSION,
17
+ },
18
+ [api_1.RateActionEnum.UPDATE]: {
19
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.APPROVED],
20
+ permissions: RATE_UPDATE_PERMISSION,
21
+ },
22
+ [api_1.RateActionEnum.DELETE]: {
23
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.DELETED],
24
+ permissions: RATE_DELETE_PERMISSION,
25
+ },
26
+ [api_1.RateActionEnum.DEACTIVATE]: {
27
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.DEACTIVATED],
28
+ permissions: RATE_DEACTIVATE_PERMISSION,
29
+ },
30
+ [api_1.RateActionEnum.ACTIVATE]: {
31
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.APPROVED],
32
+ permissions: RATE_ACTIVATE_PERMISSION,
33
+ },
34
+ [api_1.RateActionEnum.RESTORE]: {
35
+ reachableStatues: [rate_status_enum_1.RateStatusEnum.APPROVED],
36
+ permissions: RATE_RESTORE_PERMISSION,
37
+ },
38
+ };
39
+ const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(ACTION_MAP);
40
+ // APPROVED status transitions
41
+ const transitionApprovedStatusUpdateAction = createActionConfig(api_1.RateActionEnum.UPDATE, rate_status_enum_1.RateStatusEnum.APPROVED);
42
+ const transitionApprovedStatusDeleteAction = createActionConfig(api_1.RateActionEnum.DELETE, rate_status_enum_1.RateStatusEnum.DELETED);
43
+ const transitionApprovedStatusDeactivateAction = createActionConfig(api_1.RateActionEnum.DEACTIVATE, rate_status_enum_1.RateStatusEnum.DEACTIVATED);
44
+ // DEACTIVATED status transitions
45
+ const transitionDeactivatedStatusDeleteAction = createActionConfig(api_1.RateActionEnum.DELETE, rate_status_enum_1.RateStatusEnum.DELETED);
46
+ const transitionDeactivatedStatusActivateAction = createActionConfig(api_1.RateActionEnum.ACTIVATE, rate_status_enum_1.RateStatusEnum.APPROVED);
47
+ // DELETED status transitions
48
+ const transitionDeletedStatusUpdateAction = createActionConfig(api_1.RateActionEnum.UPDATE, rate_status_enum_1.RateStatusEnum.APPROVED);
49
+ const transitionDeletedStatusRestoreAction = createActionConfig(api_1.RateActionEnum.RESTORE, rate_status_enum_1.RateStatusEnum.APPROVED);
50
+ exports.rateFlowConfig = {
51
+ [rate_status_enum_1.RateStatusEnum.APPROVED]: {
52
+ actions: {
53
+ [api_1.RateActionEnum.UPDATE]: transitionApprovedStatusUpdateAction,
54
+ [api_1.RateActionEnum.DELETE]: transitionApprovedStatusDeleteAction,
55
+ [api_1.RateActionEnum.DEACTIVATE]: transitionApprovedStatusDeactivateAction,
56
+ },
57
+ },
58
+ [rate_status_enum_1.RateStatusEnum.DEACTIVATED]: {
59
+ actions: {
60
+ [api_1.RateActionEnum.DELETE]: transitionDeactivatedStatusDeleteAction,
61
+ [api_1.RateActionEnum.ACTIVATE]: transitionDeactivatedStatusActivateAction,
62
+ },
63
+ },
64
+ [rate_status_enum_1.RateStatusEnum.DELETED]: {
65
+ actions: {
66
+ [api_1.RateActionEnum.UPDATE]: transitionDeletedStatusUpdateAction,
67
+ [api_1.RateActionEnum.RESTORE]: transitionDeletedStatusRestoreAction,
68
+ },
69
+ },
70
+ };
@@ -274,3 +274,9 @@ export * from "./enums/task_status_enum";
274
274
  export * from "./flow-configs/task_flow.config";
275
275
  export * from "./interface/field-constraint/industry_field_constraints.interface";
276
276
  export * from "./interface/field-constraint/task_field_constraints.interface";
277
+ export * from "./enums/designation_status_enum";
278
+ export * from "./flow-configs/designation_flow.config";
279
+ export * from "./interface/field-constraint/designation_field_constraints.interface";
280
+ export * from "./enums/rate_status_enum";
281
+ export * from "./flow-configs/rate_flow.config";
282
+ export * from "./interface/field-constraint/rate_field_constraints.interface";
@@ -291,3 +291,9 @@ __exportStar(require("./enums/task_status_enum"), exports);
291
291
  __exportStar(require("./flow-configs/task_flow.config"), exports);
292
292
  __exportStar(require("./interface/field-constraint/industry_field_constraints.interface"), exports);
293
293
  __exportStar(require("./interface/field-constraint/task_field_constraints.interface"), exports);
294
+ __exportStar(require("./enums/designation_status_enum"), exports);
295
+ __exportStar(require("./flow-configs/designation_flow.config"), exports);
296
+ __exportStar(require("./interface/field-constraint/designation_field_constraints.interface"), exports);
297
+ __exportStar(require("./enums/rate_status_enum"), exports);
298
+ __exportStar(require("./flow-configs/rate_flow.config"), exports);
299
+ __exportStar(require("./interface/field-constraint/rate_field_constraints.interface"), exports);
@@ -1,10 +1,12 @@
1
1
  import { IEntityAuditColumn } from "./entity-audit-columns.interface";
2
- import { IApiEntity, IEntityCreateDto, IEntityFilterData, IEntityUpdateDto } from "./entity.utils.interface";
2
+ import { IApiEntity, IEntityCreateDto, IEntityFilterData, IEntityUpdateDto, Nullable } from "./entity.utils.interface";
3
+ import { DesignationStatusEnum } from "../enums/designation_status_enum";
3
4
  export interface IDesignationEntity extends IEntityAuditColumn {
4
5
  id: number;
5
6
  name: string;
6
- description?: string;
7
- order?: number;
7
+ description?: Nullable<string>;
8
+ order?: Nullable<number>;
9
+ status: DesignationStatusEnum;
8
10
  }
9
11
  export interface IDesignationEntityCreateDto extends IEntityCreateDto<IDesignationEntity> {
10
12
  }
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const createDto = {
4
- name: "string",
5
- };
3
+ // const createDto: IDesignationEntityCreateDto = {
4
+ // name: "string",
5
+ // };
@@ -51,7 +51,7 @@ import { PermissionEntityModel } from "../model/permissions.entity.model";
51
51
  import { ProjectRevenueSplitMappingEntityModel } from "../model/project-revenue-split-mapping.model";
52
52
  import { ProjectUserMappingEntityModel } from "../model/project-user-mapping.entity.model";
53
53
  import { ProjectEntityModel } from "../model/project.entity.model";
54
- import { RateEntityModel } from "../model/rate.model";
54
+ import { RateEntityModel } from "../model/rate.entity.model";
55
55
  import { ReimbursementExpenseEntityModel } from "../model/reimbursement-expense.entity.model";
56
56
  import { ReimbursementEntityModel } from "../model/reimbursement.entity.model";
57
57
  import { ReimbursementHistoryEntityModel } from "../model/reimbursement_history.entity.model";
@@ -0,0 +1,13 @@
1
+ import { IEntityAuditColumn } from "../entity-audit-columns.interface";
2
+ import { IDesignationEntity } from "../designation.entity.interface";
3
+ import { IFieldMinMaxConstraint } from "./utils";
4
+ export type IDesignationFieldLengthConstraintsExclude = "status" | "id" | keyof IEntityAuditColumn;
5
+ /**
6
+ * since some fields are optional, but we still need their
7
+ * min & max length constraints, we need to make them required in this type
8
+ * hence we are using -? to make all properties required in this type
9
+ */
10
+ export type IDesignationFieldMinMaxConstraints = {
11
+ [K in keyof Omit<IDesignationEntity, IDesignationFieldLengthConstraintsExclude>]-?: IFieldMinMaxConstraint;
12
+ };
13
+ export declare const designationFieldMinMaxConstraints: IDesignationFieldMinMaxConstraints;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.designationFieldMinMaxConstraints = void 0;
4
+ exports.designationFieldMinMaxConstraints = {
5
+ name: {
6
+ min: 2,
7
+ max: 128,
8
+ },
9
+ description: {
10
+ max: 255,
11
+ },
12
+ order: {
13
+ max: 100,
14
+ },
15
+ };
@@ -0,0 +1,13 @@
1
+ import { IEntityAuditColumn } from "../entity-audit-columns.interface";
2
+ import { IRateEntity } from "../rate.entity.interface";
3
+ import { IFieldMinMaxConstraint } from "./utils";
4
+ export type IRateFieldLengthConstraintsExclude = "status" | "currency" | "unit" | "id" | keyof IEntityAuditColumn;
5
+ /**
6
+ * since some fields are optional, but we still need their
7
+ * min & max length constraints, we need to make them required in this type
8
+ * hence we are using -? to make all properties required in this type
9
+ */
10
+ export type IRateFieldMinMaxConstraints = {
11
+ [K in keyof Omit<IRateEntity, IRateFieldLengthConstraintsExclude>]-?: IFieldMinMaxConstraint;
12
+ };
13
+ export declare const rateFieldMinMaxConstraints: IRateFieldMinMaxConstraints;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rateFieldMinMaxConstraints = void 0;
4
+ exports.rateFieldMinMaxConstraints = {
5
+ designation: {
6
+ max: 128,
7
+ },
8
+ rate: {
9
+ min: 1,
10
+ max: 100000,
11
+ },
12
+ };
@@ -1,13 +1,15 @@
1
- import { CurrencyEnum, TimeUnitEnum } from "../../enums";
2
- import { PartialBy } from "../../misc";
3
1
  import { IEntityAuditColumn } from "./entity-audit-columns.interface";
4
2
  import { IEntityCreateDto, IEntityFilterData, IEntityUpdateDto } from "./entity.utils.interface";
3
+ import { RateStatusEnum } from "../enums/rate_status_enum";
4
+ import { CurrencyEnum, TimeUnitEnum } from "../../enums";
5
+ import { PartialBy } from "../../misc";
5
6
  export interface IRateEntity extends IEntityAuditColumn {
6
7
  id: number;
7
8
  designation: string;
8
9
  rate: number;
9
10
  unit: TimeUnitEnum;
10
11
  currency: CurrencyEnum;
12
+ status: RateStatusEnum;
11
13
  }
12
14
  export interface IRateEntityCreateDto extends IEntityCreateDto<IRateEntity> {
13
15
  }
@@ -2,7 +2,7 @@ import { EntityEnum } from "../interface/entity.utils.interface";
2
2
  import { RelationConfigs } from "../interface/relation-config.interface";
3
3
  import { BaseEntityModel } from "./base.entity.model";
4
4
  import { IClientQuoteRateEntity } from "../interface/client_quote_rate.entity.interface";
5
- import { ClientAffiliateEntityModel } from "./client-affiliate.entity.model";
5
+ import { ClientQuoteEntityModel } from "./client_quote.entity.model";
6
6
  export declare class ClientQuoteRateEntityModel extends BaseEntityModel<EntityEnum.CLIENT_QUOTE_RATE> implements IClientQuoteRateEntity {
7
7
  id: number;
8
8
  clientQuoteId: number;
@@ -15,7 +15,7 @@ export declare class ClientQuoteRateEntityModel extends BaseEntityModel<EntityEn
15
15
  updatedOn: number;
16
16
  createdBy: number;
17
17
  updatedBy: number;
18
- clientQuote?: ClientAffiliateEntityModel;
18
+ clientQuote?: ClientQuoteEntityModel;
19
19
  static relationConfigs: RelationConfigs<[EntityEnum.CLIENT_QUOTE], EntityEnum.CLIENT_QUOTE_RATE>;
20
20
  static fromEntity(entity: IClientQuoteRateEntity): ClientQuoteRateEntityModel;
21
21
  getRelationConfigs(): any[];
@@ -1,19 +1,39 @@
1
- import { IDesignationEntity } from "../interface/designation.entity.interface";
2
1
  import { EntityEnum } from "../interface/entity.utils.interface";
3
- import { RelationConfigs } from "../interface/relation-config.interface";
4
2
  import { BaseEntityModel } from "./base.entity.model";
5
- import { RateEntityModel } from "./rate.model";
3
+ import { RelationConfigs } from "../interface/relation-config.interface";
4
+ import { IUserEntity } from "../interface/user.entity.interface";
5
+ import { UserEntityModel } from "./user.entity.model";
6
+ import { IRowActions } from "./interface/row-actions.interface";
7
+ import { IDesignationEntity } from "../interface/designation.entity.interface";
8
+ import { DesignationStatusEnum } from "../enums/designation_status_enum";
9
+ import { ClientQuoteRateEntityModel } from "./client_quote_rate.entity.model";
10
+ import { DesignationActionEnum } from "../../api";
11
+ import { IDesignationFlowConfigContextData } from "../flow-configs/designation_flow.config";
12
+ import { RateEntityModel } from "./rate.entity.model";
6
13
  export declare class DesignationEntityModel extends BaseEntityModel<EntityEnum.DESIGNATION> implements IDesignationEntity {
7
14
  id: number;
8
15
  name: string;
9
16
  description?: string;
10
17
  order?: number;
11
- createdBy: number;
18
+ status: DesignationStatusEnum;
12
19
  createdOn: number;
13
- updatedBy: number;
14
20
  updatedOn: number;
21
+ createdBy: number;
22
+ updatedBy: number;
23
+ clientQuoteRates?: ClientQuoteRateEntityModel[];
15
24
  rate?: RateEntityModel[];
25
+ static relationConfigs: RelationConfigs<[EntityEnum.CLIENT_QUOTE_RATE, EntityEnum.RATE], EntityEnum.DESIGNATION>;
16
26
  static fromEntity(entity: IDesignationEntity): DesignationEntityModel;
17
27
  getRelationConfigs(): any[];
18
- static relationConfigs: RelationConfigs<[EntityEnum.RATE], EntityEnum.DESIGNATION>;
28
+ getNextStatus(currentUser: IUserEntity, action: DesignationActionEnum, designationFlowConfigContextData: IDesignationFlowConfigContextData): DesignationStatusEnum;
29
+ getAvailableActions(currentUser: UserEntityModel, config?: {
30
+ combinedActions?: Record<string, {
31
+ combineActions: DesignationActionEnum[];
32
+ label: string;
33
+ }>;
34
+ customLabels?: Partial<Record<DesignationActionEnum, string>>;
35
+ }): IRowActions<EntityEnum.DESIGNATION>[];
36
+ getUpdateActionVisibility(currentUser: UserEntityModel): {
37
+ [key: string]: () => boolean;
38
+ };
19
39
  }
@@ -1,29 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DesignationEntityModel = void 0;
4
- const relation_type_enum_1 = require("../enums/relation-type.enum");
5
4
  const entity_utils_interface_1 = require("../interface/entity.utils.interface");
6
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 designation_status_enum_1 = require("../enums/designation_status_enum");
11
+ const designation_flow_config_1 = require("../flow-configs/designation_flow.config");
7
12
  class DesignationEntityModel extends base_entity_model_1.BaseEntityModel {
8
13
  constructor() {
9
14
  super(...arguments);
10
15
  this.id = 0;
11
16
  this.name = "";
12
- this.createdBy = 0;
17
+ this.status = designation_status_enum_1.DesignationStatusEnum.APPROVED;
13
18
  this.createdOn = 0;
14
- this.updatedBy = 0;
15
19
  this.updatedOn = 0;
20
+ this.createdBy = 0;
21
+ this.updatedBy = 0;
16
22
  this.rate = [];
17
23
  }
18
- // constructor(data: IDesignationApiEntity) {
19
- // this.id = data.id;
20
- // this.name = data.name;
21
- // this.description = data.description;
22
- // this.createdBy = data.createdBy;
23
- // this.createdOn = data.createdOn;
24
- // this.updatedBy = data.updatedBy;
25
- // this.updatedOn = data.updatedOn;
26
- // }
27
24
  static fromEntity(entity) {
28
25
  const result = new DesignationEntityModel(entity_utils_interface_1.EntityEnum.DESIGNATION);
29
26
  Object.assign(result, entity);
@@ -32,9 +29,91 @@ class DesignationEntityModel extends base_entity_model_1.BaseEntityModel {
32
29
  getRelationConfigs() {
33
30
  return this.constructor.prototype.constructor.relationConfigs || [];
34
31
  }
32
+ // get clientQuotes(): ClientQuoteEntityModel[] | undefined {
33
+ // // many_to_many -> many_to_many verified
34
+ // // {'designation->client_quote_rate': 'one_to_many', 'client_quote_rate->client_quote': 'many_to_one'}
35
+ // // ['designation', 'client_quote_rate'] -> one_to_many
36
+ // // ['client_quote_rate', 'client_quote'] -> many_to_one
37
+ // return this.clientQuoteRates
38
+ // ?.flatMap((clientQuoteRate) => clientQuoteRate.clientQuote)
39
+ // .filter((clientQuote): clientQuote is ClientQuoteEntityModel => !!clientQuote)
40
+ // .reduce((accumulator: ClientQuoteEntityModel[], current) => {
41
+ // if (!accumulator.some((clientQuote) => clientQuote.id === current.id)) {
42
+ // accumulator.push(current);
43
+ // }
44
+ // return accumulator;
45
+ // }, []);
46
+ // }
47
+ getNextStatus(currentUser, action, designationFlowConfigContextData) {
48
+ if (!this.status) {
49
+ throw new exceptions_1.AppBadRequestException({
50
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
51
+ message: [`Status not found: ${this.status}`],
52
+ });
53
+ }
54
+ const flowForStatus = designation_flow_config_1.designationFlowConfig[this.status];
55
+ if (!flowForStatus) {
56
+ throw new exceptions_1.AppBadRequestException({
57
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
58
+ message: [`No flow configuration found for status: ${this.status}`],
59
+ });
60
+ }
61
+ if (!action) {
62
+ throw new exceptions_1.AppBadRequestException({
63
+ key: error_key_enum_1.ErrorKeyEnum.ACTION_DATA,
64
+ message: ["actionData is required"],
65
+ });
66
+ }
67
+ const matchingPermissionConfig = flowForStatus.actions[action];
68
+ if (!matchingPermissionConfig) {
69
+ throw new exceptions_1.AppBadRequestException({
70
+ key: error_key_enum_1.ErrorKeyEnum.ACTION,
71
+ message: [`Action '${action}' is not valid for the current status.`],
72
+ });
73
+ }
74
+ if (!currentUser.permissions || currentUser.permissions.length === 0) {
75
+ throw new exceptions_1.AppBadRequestException({
76
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSIONS,
77
+ message: ["Permission not available for currentUser"],
78
+ });
79
+ }
80
+ const hasPermission = matchingPermissionConfig.permissions.some((permission) => currentUser.permissions.includes(permission));
81
+ if (!hasPermission) {
82
+ throw new exceptions_1.AppBadRequestException({
83
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSION,
84
+ message: [`Current user does not have permission to ${action} designation`],
85
+ });
86
+ }
87
+ const nextStatus = matchingPermissionConfig.next(designationFlowConfigContextData);
88
+ return nextStatus;
89
+ }
90
+ getAvailableActions(currentUser, config) {
91
+ var _a;
92
+ const params = {
93
+ flowConfig: designation_flow_config_1.designationFlowConfig,
94
+ currentStatus: this.status,
95
+ userPermissions: (_a = currentUser.permissions) !== null && _a !== void 0 ? _a : [],
96
+ visibilityData: this.getUpdateActionVisibility.bind(this, currentUser),
97
+ combinedActions: config === null || config === void 0 ? void 0 : config.combinedActions,
98
+ customLabels: config === null || config === void 0 ? void 0 : config.customLabels,
99
+ };
100
+ return utils_1.EntityActionFlowResolverV2.getAvailableActionsData(params);
101
+ }
102
+ getUpdateActionVisibility(currentUser) {
103
+ return {};
104
+ }
35
105
  }
36
106
  exports.DesignationEntityModel = DesignationEntityModel;
37
107
  DesignationEntityModel.relationConfigs = [
108
+ {
109
+ name: entity_utils_interface_1.EntityEnum.CLIENT_QUOTE_RATE,
110
+ relation: relation_type_enum_1.RelationType.MANY,
111
+ key: "clientQuoteRates",
112
+ mapKeyConfig: {
113
+ relationKey: "resourceType",
114
+ key: "name",
115
+ },
116
+ },
38
117
  {
39
118
  name: entity_utils_interface_1.EntityEnum.RATE,
40
119
  relation: relation_type_enum_1.RelationType.MANY,
@@ -59,7 +59,7 @@ const permissions_entity_model_1 = require("./permissions.entity.model");
59
59
  const project_revenue_split_mapping_model_1 = require("./project-revenue-split-mapping.model");
60
60
  const project_user_mapping_entity_model_1 = require("./project-user-mapping.entity.model");
61
61
  const project_entity_model_1 = require("./project.entity.model");
62
- const rate_model_1 = require("./rate.model");
62
+ const rate_entity_model_1 = require("./rate.entity.model");
63
63
  const reimbursement_expense_entity_model_1 = require("./reimbursement-expense.entity.model");
64
64
  const reimbursement_entity_model_1 = require("./reimbursement.entity.model");
65
65
  const reimbursement_history_entity_model_1 = require("./reimbursement_history.entity.model");
@@ -178,7 +178,7 @@ exports.entityEnumToEntityModel = {
178
178
  [entity_utils_interface_1.EntityEnum.CLIENT_QUOTE]: client_quote_entity_model_1.ClientQuoteEntityModel.fromEntity,
179
179
  [entity_utils_interface_1.EntityEnum.CLIENT_QUOTE_RATE]: client_quote_rate_entity_model_1.ClientQuoteRateEntityModel.fromEntity,
180
180
  [entity_utils_interface_1.EntityEnum.DESIGNATION]: designation_entity_model_1.DesignationEntityModel.fromEntity,
181
- [entity_utils_interface_1.EntityEnum.RATE]: rate_model_1.RateEntityModel.fromEntity,
181
+ [entity_utils_interface_1.EntityEnum.RATE]: rate_entity_model_1.RateEntityModel.fromEntity,
182
182
  [entity_utils_interface_1.EntityEnum.CLIENT_USER_MAPPING]: client_user_mapping_entity_model_1.ClientUserMappingEntityModel.fromEntity,
183
183
  [entity_utils_interface_1.EntityEnum.CLIENT_INTRODUCING_MAPPING]: client_introducing_mapping_entity_model_1.ClientIntroducingMappingEntityModel.fromEntity,
184
184
  [entity_utils_interface_1.EntityEnum.CRON_JOBS]: cron_jobs_entity_model_1.CronJobsEntityModel.fromEntity,
@@ -1,19 +1,42 @@
1
- import { CurrencyEnum, TimeUnitEnum } from "../../enums";
2
1
  import { EntityEnum } from "../interface/entity.utils.interface";
3
- import { IRateEntity } from "../interface/rate.entity.interface";
4
- import { RelationConfigs } from "../interface/relation-config.interface";
5
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 { UserEntityModel } from "./user.entity.model";
6
+ import { IRowActions } from "./interface/row-actions.interface";
7
+ import { IRateEntity } from "../interface/rate.entity.interface";
8
+ import { RateStatusEnum } from "../enums/rate_status_enum";
9
+ import { DesignationEntityModel } from "./designation.entity.model";
10
+ import { RateActionEnum } from "../../api";
11
+ import { IRateFlowConfigContextData } from "../flow-configs/rate_flow.config";
12
+ import { CurrencyEnum, TimeUnitEnum } from "../../enums";
6
13
  export declare class RateEntityModel extends BaseEntityModel<EntityEnum.RATE> implements IRateEntity {
7
14
  id: number;
8
15
  designation: string;
9
16
  rate: number;
10
- unit: TimeUnitEnum;
11
17
  currency: CurrencyEnum;
18
+ unit: TimeUnitEnum;
19
+ status: RateStatusEnum;
12
20
  createdOn: number;
13
21
  updatedOn: number;
14
22
  createdBy: number;
15
23
  updatedBy: number;
16
- static relationConfigs: RelationConfigs<[], EntityEnum.RATE>;
24
+ designationModel?: DesignationEntityModel;
25
+ static relationConfigs: RelationConfigs<[EntityEnum.DESIGNATION], EntityEnum.RATE>;
17
26
  static fromEntity(entity: IRateEntity): RateEntityModel;
18
- getRelationConfigs(): [];
27
+ getRelationConfigs(): any[];
28
+ getNextStatus(currentUser: IUserEntity, action: RateActionEnum, rateFlowConfigContextData: IRateFlowConfigContextData): RateStatusEnum;
29
+ getAvailableActions(currentUser: UserEntityModel, config?: {
30
+ combinedActions?: Record<string, {
31
+ combineActions: RateActionEnum[];
32
+ label: string;
33
+ }>;
34
+ customLabels?: Partial<Record<RateActionEnum, string>>;
35
+ }): IRowActions<EntityEnum.RATE>[];
36
+ getUpdateActionVisibility(currentUser: UserEntityModel): {
37
+ [key: string]: () => boolean;
38
+ };
39
+ static getByDesignation(designation: string, roleModels: RateEntityModel[], designationModels: DesignationEntityModel[]): RateEntityModel[];
40
+ static getByCurrency(currency: string, roleModels: RateEntityModel[]): RateEntityModel | undefined;
41
+ static getByDesignationCurrency(designation: string, currency: string, roleModels: RateEntityModel[], designationModels: DesignationEntityModel[]): RateEntityModel | undefined;
19
42
  }
@@ -1,17 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RateEntityModel = void 0;
4
- const enums_1 = require("../../enums");
5
4
  const entity_utils_interface_1 = require("../interface/entity.utils.interface");
6
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
+ // import { TimeUnitEnum } from "../enums/time_unit_enum";
11
+ // import { CurrencyEnum } from "../enums/currency_enum";
12
+ const rate_status_enum_1 = require("../enums/rate_status_enum");
13
+ const rate_flow_config_1 = require("../flow-configs/rate_flow.config");
14
+ const enums_1 = require("../../enums");
7
15
  class RateEntityModel extends base_entity_model_1.BaseEntityModel {
8
16
  constructor() {
9
17
  super(...arguments);
10
18
  this.id = 0;
11
19
  this.designation = "";
12
20
  this.rate = 0;
13
- this.unit = enums_1.TimeUnitEnum.HOUR;
14
21
  this.currency = enums_1.CurrencyEnum.INR;
22
+ this.unit = enums_1.TimeUnitEnum.SECOND;
23
+ this.status = rate_status_enum_1.RateStatusEnum.APPROVED;
15
24
  this.createdOn = 0;
16
25
  this.updatedOn = 0;
17
26
  this.createdBy = 0;
@@ -23,8 +32,124 @@ class RateEntityModel extends base_entity_model_1.BaseEntityModel {
23
32
  return result;
24
33
  }
25
34
  getRelationConfigs() {
26
- return RateEntityModel.relationConfigs;
35
+ return this.constructor.prototype.constructor.relationConfigs || [];
36
+ }
37
+ // get clientQuoteRates(): ClientQuoteRateEntityModel[] | undefined {
38
+ // // many_to_many -> many_to_many verified
39
+ // // {'rate->designation': 'many_to_one', 'designation->client_quote_rate': 'one_to_many'}
40
+ // // ['rate', 'designation'] -> many_to_one
41
+ // // ['designation', 'client_quote_rate'] -> one_to_many
42
+ // return this.designationModel?.clientQuoteRates;
43
+ // }
44
+ // get clientQuotes(): ClientQuoteEntityModel[] | undefined {
45
+ // // many_to_many -> many_to_many verified
46
+ // // {'rate->designation': 'many_to_one', 'designation->client_quote_rate': 'one_to_many', 'client_quote_rate->client_quote': 'many_to_one'}
47
+ // // ['designation', 'client_quote_rate'] -> one_to_many
48
+ // // ['client_quote_rate', 'client_quote'] -> many_to_one
49
+ // return this.clientQuoteRates
50
+ // ?.flatMap((clientQuoteRate) => clientQuoteRate.clientQuote)
51
+ // .filter((clientQuote): clientQuote is ClientQuoteEntityModel => !!clientQuote)
52
+ // .reduce((accumulator: ClientQuoteEntityModel[], current) => {
53
+ // if (!accumulator.some((clientQuote) => clientQuote.id === current.id)) {
54
+ // accumulator.push(current);
55
+ // }
56
+ // return accumulator;
57
+ // }, []);
58
+ // }
59
+ getNextStatus(currentUser, action, rateFlowConfigContextData) {
60
+ if (!this.status) {
61
+ throw new exceptions_1.AppBadRequestException({
62
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
63
+ message: [`Status not found: ${this.status}`],
64
+ });
65
+ }
66
+ const flowForStatus = rate_flow_config_1.rateFlowConfig[this.status];
67
+ if (!flowForStatus) {
68
+ throw new exceptions_1.AppBadRequestException({
69
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
70
+ message: [`No flow configuration found for status: ${this.status}`],
71
+ });
72
+ }
73
+ if (!action) {
74
+ throw new exceptions_1.AppBadRequestException({
75
+ key: error_key_enum_1.ErrorKeyEnum.ACTION_DATA,
76
+ message: ["actionData is required"],
77
+ });
78
+ }
79
+ const matchingPermissionConfig = flowForStatus.actions[action];
80
+ if (!matchingPermissionConfig) {
81
+ throw new exceptions_1.AppBadRequestException({
82
+ key: error_key_enum_1.ErrorKeyEnum.ACTION,
83
+ message: [`Action '${action}' is not valid for the current status.`],
84
+ });
85
+ }
86
+ if (!currentUser.permissions || currentUser.permissions.length === 0) {
87
+ throw new exceptions_1.AppBadRequestException({
88
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSIONS,
89
+ message: ["Permission not available for currentUser"],
90
+ });
91
+ }
92
+ const hasPermission = matchingPermissionConfig.permissions.some((permission) => currentUser.permissions.includes(permission));
93
+ if (!hasPermission) {
94
+ throw new exceptions_1.AppBadRequestException({
95
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSION,
96
+ message: [`Current user does not have permission to ${action} rate`],
97
+ });
98
+ }
99
+ const nextStatus = matchingPermissionConfig.next(rateFlowConfigContextData);
100
+ return nextStatus;
101
+ }
102
+ getAvailableActions(currentUser, config) {
103
+ var _a;
104
+ const params = {
105
+ flowConfig: rate_flow_config_1.rateFlowConfig,
106
+ currentStatus: this.status,
107
+ userPermissions: (_a = currentUser.permissions) !== null && _a !== void 0 ? _a : [],
108
+ visibilityData: this.getUpdateActionVisibility.bind(this, currentUser),
109
+ combinedActions: config === null || config === void 0 ? void 0 : config.combinedActions,
110
+ customLabels: config === null || config === void 0 ? void 0 : config.customLabels,
111
+ };
112
+ return utils_1.EntityActionFlowResolverV2.getAvailableActionsData(params);
113
+ }
114
+ getUpdateActionVisibility(currentUser) {
115
+ return {};
116
+ }
117
+ static getByDesignation(designation, roleModels, designationModels) {
118
+ const filteredDesignationModels = designationModels.filter((designationModel) => designationModel.name === designation);
119
+ if (filteredDesignationModels.length === 0) {
120
+ console.warn(`No rate model found for designation: ${designation}. Returning empty array.`);
121
+ return [];
122
+ }
123
+ return roleModels.filter((role) => filteredDesignationModels.some((designationModel) => designationModel.name === role.designation));
124
+ }
125
+ static getByCurrency(currency, roleModels) {
126
+ const filteredCurrencyModels = roleModels.filter((role) => role.currency === currency);
127
+ if (filteredCurrencyModels.length === 0) {
128
+ console.warn(`No rate model found for currency: ${currency}. Returning undefined.`);
129
+ return undefined;
130
+ }
131
+ if (filteredCurrencyModels.length > 1) {
132
+ console.warn(`Multiple rate models found for currency: ${currency}. Returning the first matching model.`);
133
+ }
134
+ return filteredCurrencyModels[0];
135
+ }
136
+ static getByDesignationCurrency(designation, currency, roleModels, designationModels) {
137
+ const filteredDesignationModels = RateEntityModel.getByDesignation(designation, roleModels, designationModels);
138
+ if (filteredDesignationModels.length === 0) {
139
+ return undefined;
140
+ }
141
+ return RateEntityModel.getByCurrency(currency, filteredDesignationModels);
27
142
  }
28
143
  }
29
144
  exports.RateEntityModel = RateEntityModel;
30
- RateEntityModel.relationConfigs = [];
145
+ RateEntityModel.relationConfigs = [
146
+ {
147
+ name: entity_utils_interface_1.EntityEnum.DESIGNATION,
148
+ relation: relation_type_enum_1.RelationType.ONE,
149
+ key: "designation",
150
+ mapKeyConfig: {
151
+ relationKey: "name",
152
+ key: "designation",
153
+ },
154
+ },
155
+ ];
@@ -1,21 +1 @@
1
- import { TimeUnitEnum, CurrencyEnum } from "../../enums";
2
- import { EntityEnum } from "../interface/entity.utils.interface";
3
- import { IRateEntity } from "../interface/rate.entity.interface";
4
- import { BaseEntityModel } from "./base.entity.model";
5
- import { DesignationEntityModel } from "./designation.entity.model";
6
- export declare class RateEntityModel extends BaseEntityModel<EntityEnum.RATE> implements IRateEntity {
7
- id: number;
8
- designation: string;
9
- rate: number;
10
- unit: TimeUnitEnum;
11
- currency: CurrencyEnum;
12
- createdOn: number;
13
- updatedOn: number;
14
- createdBy: number;
15
- updatedBy: number;
16
- static fromEntity(entity: IRateEntity): RateEntityModel;
17
- getRelationConfigs(): any[];
18
- static getByDesignation(designation: string, roleModels: RateEntityModel[], designationModels: DesignationEntityModel[]): RateEntityModel[];
19
- static getByCurrency(currency: string, roleModels: RateEntityModel[]): RateEntityModel | undefined;
20
- static getByDesignationCurrency(designation: string, currency: string, roleModels: RateEntityModel[], designationModels: DesignationEntityModel[]): RateEntityModel | undefined;
21
- }
1
+ export {};
@@ -1,42 +1,52 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RateEntityModel = void 0;
4
- const entity_utils_interface_1 = require("../interface/entity.utils.interface");
5
- const base_entity_model_1 = require("./base.entity.model");
6
- class RateEntityModel extends base_entity_model_1.BaseEntityModel {
7
- static fromEntity(entity) {
8
- const result = new RateEntityModel(entity_utils_interface_1.EntityEnum.RATE);
9
- Object.assign(result, entity);
10
- return result;
11
- }
12
- getRelationConfigs() {
13
- return this.constructor.prototype.constructor.relationConfigs || [];
14
- }
15
- static getByDesignation(designation, roleModels, designationModels) {
16
- const filteredDesignationModels = designationModels.filter((designationModel) => designationModel.name === designation);
17
- if (filteredDesignationModels.length === 0) {
18
- console.warn(`No rate model found for designation: ${designation}. Returning empty array.`);
19
- return [];
20
- }
21
- return roleModels.filter((role) => filteredDesignationModels.some((designationModel) => designationModel.name === role.designation));
22
- }
23
- static getByCurrency(currency, roleModels) {
24
- const filteredCurrencyModels = roleModels.filter((role) => role.currency === currency);
25
- if (filteredCurrencyModels.length === 0) {
26
- console.warn(`No rate model found for currency: ${currency}. Returning undefined.`);
27
- return undefined;
28
- }
29
- if (filteredCurrencyModels.length > 1) {
30
- console.warn(`Multiple rate models found for currency: ${currency}. Returning the first matching model.`);
31
- }
32
- return filteredCurrencyModels[0];
33
- }
34
- static getByDesignationCurrency(designation, currency, roleModels, designationModels) {
35
- const filteredDesignationModels = RateEntityModel.getByDesignation(designation, roleModels, designationModels);
36
- if (filteredDesignationModels.length === 0) {
37
- return undefined;
38
- }
39
- return RateEntityModel.getByCurrency(currency, filteredDesignationModels);
40
- }
41
- }
42
- exports.RateEntityModel = RateEntityModel;
3
+ // class RateEntityModel extends BaseEntityModel<EntityEnum.RATE> implements IRateEntity {
4
+ // id!: number;
5
+ // designation!: string;
6
+ // rate!: number;
7
+ // unit!: TimeUnitEnum;
8
+ // currency!: CurrencyEnum;
9
+ // createdOn!: number;
10
+ // updatedOn!: number;
11
+ // createdBy!: number;
12
+ // updatedBy!: number;
13
+ // static fromEntity(entity: IRateEntity): RateEntityModel {
14
+ // const result = new RateEntityModel(EntityEnum.RATE);
15
+ // Object.assign(result, entity);
16
+ // return result;
17
+ // }
18
+ // getRelationConfigs(): any[] {
19
+ // return this.constructor.prototype.constructor.relationConfigs || [];
20
+ // }
21
+ // static getByDesignation(designation: string, roleModels: RateEntityModel[], designationModels: DesignationEntityModel[]): RateEntityModel[] {
22
+ // const filteredDesignationModels = designationModels.filter((designationModel) => designationModel.name === designation);
23
+ // if (filteredDesignationModels.length === 0) {
24
+ // console.warn(`No rate model found for designation: ${designation}. Returning empty array.`);
25
+ // return [];
26
+ // }
27
+ // return roleModels.filter((role) => filteredDesignationModels.some((designationModel) => designationModel.name === role.designation));
28
+ // }
29
+ // static getByCurrency(currency: string, roleModels: RateEntityModel[]): RateEntityModel | undefined {
30
+ // const filteredCurrencyModels = roleModels.filter((role) => role.currency === currency);
31
+ // if (filteredCurrencyModels.length === 0) {
32
+ // console.warn(`No rate model found for currency: ${currency}. Returning undefined.`);
33
+ // return undefined;
34
+ // }
35
+ // if (filteredCurrencyModels.length > 1) {
36
+ // console.warn(`Multiple rate models found for currency: ${currency}. Returning the first matching model.`);
37
+ // }
38
+ // return filteredCurrencyModels[0];
39
+ // }
40
+ // static getByDesignationCurrency(
41
+ // designation: string,
42
+ // currency: string,
43
+ // roleModels: RateEntityModel[],
44
+ // designationModels: DesignationEntityModel[],
45
+ // ): RateEntityModel | undefined {
46
+ // const filteredDesignationModels = RateEntityModel.getByDesignation(designation, roleModels, designationModels);
47
+ // if (filteredDesignationModels.length === 0) {
48
+ // return undefined;
49
+ // }
50
+ // return RateEntityModel.getByCurrency(currency, filteredDesignationModels);
51
+ // }
52
+ // }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "law-common",
3
- "version": "12.7.0",
3
+ "version": "12.7.1-beta.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [