rez_core 2.2.7 → 2.2.9
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.
- package/dist/constant/global.constant.d.ts +2 -1
- package/dist/constant/global.constant.js +3 -2
- package/dist/constant/global.constant.js.map +1 -1
- package/dist/module/enterprise/repository/school.repository.js +18 -2
- package/dist/module/enterprise/repository/school.repository.js.map +1 -1
- package/dist/module/filter/controller/filter.controller.d.ts +1 -1
- package/dist/module/filter/controller/filter.controller.js +7 -4
- package/dist/module/filter/controller/filter.controller.js.map +1 -1
- package/dist/module/filter/dto/filter-request.dto.d.ts +1 -0
- package/dist/module/filter/service/filter.service.js +26 -4
- package/dist/module/filter/service/filter.service.js.map +1 -1
- package/dist/module/layout_preference/controller/layout_preference.controller.js +4 -4
- package/dist/module/layout_preference/controller/layout_preference.controller.js.map +1 -1
- package/dist/module/layout_preference/entity/layout_preference.entity.d.ts +2 -0
- package/dist/module/layout_preference/entity/layout_preference.entity.js +13 -0
- package/dist/module/layout_preference/entity/layout_preference.entity.js.map +1 -1
- package/dist/module/layout_preference/repository/layout_preference.repository.d.ts +1 -1
- package/dist/module/layout_preference/repository/layout_preference.repository.js +4 -2
- package/dist/module/layout_preference/repository/layout_preference.repository.js.map +1 -1
- package/dist/module/layout_preference/service/layout_preference.service.d.ts +1 -1
- package/dist/module/layout_preference/service/layout_preference.service.js +17 -4
- package/dist/module/layout_preference/service/layout_preference.service.js.map +1 -1
- package/dist/module/listmaster/entity/list-master-items.entity.js +5 -5
- package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
- package/dist/module/meta/controller/media.controller.d.ts +1 -1
- package/dist/module/meta/controller/media.controller.js +1 -1
- package/dist/module/meta/controller/media.controller.js.map +1 -1
- package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
- package/dist/module/module/controller/module-access.controller.d.ts +1 -1
- package/dist/module/module/controller/module-access.controller.js +6 -6
- package/dist/module/module/controller/module-access.controller.js.map +1 -1
- package/dist/module/module/service/module-access.service.d.ts +2 -1
- package/dist/module/module/service/module-access.service.js +5 -3
- package/dist/module/module/service/module-access.service.js.map +1 -1
- package/dist/module/workflow/controller/action-category.controller.d.ts +8 -0
- package/dist/module/workflow/controller/action-category.controller.js +45 -0
- package/dist/module/workflow/controller/action-category.controller.js.map +1 -0
- package/dist/module/workflow/controller/action.controller.d.ts +28 -0
- package/dist/module/workflow/controller/action.controller.js +88 -0
- package/dist/module/workflow/controller/action.controller.js.map +1 -0
- package/dist/module/workflow/controller/comm-template.controller.d.ts +11 -0
- package/dist/module/workflow/controller/comm-template.controller.js +44 -0
- package/dist/module/workflow/controller/comm-template.controller.js.map +1 -0
- package/dist/module/workflow/controller/entity-modification.controller.d.ts +8 -0
- package/dist/module/workflow/controller/entity-modification.controller.js +44 -0
- package/dist/module/workflow/controller/entity-modification.controller.js.map +1 -0
- package/dist/module/workflow/controller/stage-group.controller.d.ts +10 -0
- package/dist/module/workflow/controller/stage-group.controller.js +43 -0
- package/dist/module/workflow/controller/stage-group.controller.js.map +1 -0
- package/dist/module/workflow/controller/stage.controller.d.ts +13 -0
- package/dist/module/workflow/controller/stage.controller.js +56 -0
- package/dist/module/workflow/controller/stage.controller.js.map +1 -0
- package/dist/module/workflow/controller/task.controller.d.ts +21 -0
- package/dist/module/workflow/controller/task.controller.js +58 -0
- package/dist/module/workflow/controller/task.controller.js.map +1 -0
- package/dist/module/workflow/controller/workflow-meta.controller.d.ts +15 -0
- package/dist/module/workflow/controller/workflow-meta.controller.js +70 -0
- package/dist/module/workflow/controller/workflow-meta.controller.js.map +1 -0
- package/dist/module/workflow/controller/workflow.controller.d.ts +25 -10
- package/dist/module/workflow/controller/workflow.controller.js +32 -15
- package/dist/module/workflow/controller/workflow.controller.js.map +1 -1
- package/dist/module/workflow/entity/action-category.entity.d.ts +1 -0
- package/dist/module/workflow/entity/action-category.entity.js +4 -0
- package/dist/module/workflow/entity/action-category.entity.js.map +1 -1
- package/dist/module/workflow/entity/action-data.entity.d.ts +15 -0
- package/dist/module/workflow/entity/action-data.entity.js +70 -0
- package/dist/module/workflow/entity/action-data.entity.js.map +1 -0
- package/dist/module/workflow/entity/action.entity.d.ts +7 -2
- package/dist/module/workflow/entity/action.entity.js +30 -10
- package/dist/module/workflow/entity/action.entity.js.map +1 -1
- package/dist/module/workflow/entity/comm-template.entity.d.ts +5 -0
- package/dist/module/workflow/entity/comm-template.entity.js +21 -1
- package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
- package/dist/module/workflow/entity/entity-modification.entity.d.ts +13 -0
- package/dist/module/workflow/entity/entity-modification.entity.js +63 -0
- package/dist/module/workflow/entity/entity-modification.entity.js.map +1 -0
- package/dist/module/workflow/entity/stage-group.entity.d.ts +1 -1
- package/dist/module/workflow/entity/stage-group.entity.js +1 -1
- package/dist/module/workflow/entity/stage-group.entity.js.map +1 -1
- package/dist/module/workflow/entity/stage-movement-data.entity.d.ts +4 -0
- package/dist/module/workflow/entity/stage-movement-data.entity.js +16 -0
- package/dist/module/workflow/entity/stage-movement-data.entity.js.map +1 -1
- package/dist/module/workflow/entity/stage.entity.d.ts +2 -2
- package/dist/module/workflow/entity/stage.entity.js +5 -5
- package/dist/module/workflow/entity/stage.entity.js.map +1 -1
- package/dist/module/workflow/entity/task-data.entity.d.ts +25 -0
- package/dist/module/workflow/entity/task-data.entity.js +110 -0
- package/dist/module/workflow/entity/task-data.entity.js.map +1 -0
- package/dist/module/workflow/entity/template-attach-mapper.entity.d.ts +11 -0
- package/dist/module/workflow/entity/template-attach-mapper.entity.js +54 -0
- package/dist/module/workflow/entity/template-attach-mapper.entity.js.map +1 -0
- package/dist/module/workflow/entity/workflow-level-mapping.entity.d.ts +7 -0
- package/dist/module/workflow/entity/workflow-level-mapping.entity.js +38 -0
- package/dist/module/workflow/entity/workflow-level-mapping.entity.js.map +1 -0
- package/dist/module/workflow/entity/workflow.entity.d.ts +2 -0
- package/dist/module/workflow/entity/workflow.entity.js +8 -0
- package/dist/module/workflow/entity/workflow.entity.js.map +1 -1
- package/dist/module/workflow/repository/action-data.repository.d.ts +10 -0
- package/dist/module/workflow/repository/action-data.repository.js +85 -0
- package/dist/module/workflow/repository/action-data.repository.js.map +1 -0
- package/dist/module/workflow/repository/action.repository.d.ts +17 -0
- package/dist/module/workflow/repository/action.repository.js +97 -0
- package/dist/module/workflow/repository/action.repository.js.map +1 -0
- package/dist/module/workflow/repository/comm-template.repository.d.ts +14 -0
- package/dist/module/workflow/repository/comm-template.repository.js +87 -0
- package/dist/module/workflow/repository/comm-template.repository.js.map +1 -0
- package/dist/module/workflow/repository/stage-group.repository.d.ts +7 -0
- package/dist/module/workflow/repository/stage-group.repository.js +50 -0
- package/dist/module/workflow/repository/stage-group.repository.js.map +1 -0
- package/dist/module/workflow/repository/stage-movement.repository.d.ts +23 -0
- package/dist/module/workflow/repository/stage-movement.repository.js +142 -0
- package/dist/module/workflow/repository/stage-movement.repository.js.map +1 -0
- package/dist/module/workflow/repository/stage.repository.d.ts +7 -0
- package/dist/module/workflow/repository/stage.repository.js +50 -0
- package/dist/module/workflow/repository/stage.repository.js.map +1 -0
- package/dist/module/workflow/repository/task.repository.d.ts +10 -0
- package/dist/module/workflow/repository/task.repository.js +77 -0
- package/dist/module/workflow/repository/task.repository.js.map +1 -0
- package/dist/module/workflow/repository/workflow.repository.d.ts +9 -1
- package/dist/module/workflow/repository/workflow.repository.js +38 -6
- package/dist/module/workflow/repository/workflow.repository.js.map +1 -1
- package/dist/module/workflow/service/action-category.service.d.ts +5 -0
- package/dist/module/workflow/service/action-category.service.js +23 -1
- package/dist/module/workflow/service/action-category.service.js.map +1 -1
- package/dist/module/workflow/service/action-data.service.d.ts +11 -0
- package/dist/module/workflow/service/action-data.service.js +36 -0
- package/dist/module/workflow/service/action-data.service.js.map +1 -0
- package/dist/module/workflow/service/action.service.d.ts +19 -1
- package/dist/module/workflow/service/action.service.js +159 -10
- package/dist/module/workflow/service/action.service.js.map +1 -1
- package/dist/module/workflow/service/comm-template.service.d.ts +11 -0
- package/dist/module/workflow/service/comm-template.service.js +59 -1
- package/dist/module/workflow/service/comm-template.service.js.map +1 -1
- package/dist/module/workflow/service/entity-modification.service.d.ts +8 -0
- package/dist/module/workflow/service/entity-modification.service.js +52 -0
- package/dist/module/workflow/service/entity-modification.service.js.map +1 -0
- package/dist/module/workflow/service/populate-workflow.service.d.ts +21 -0
- package/dist/module/workflow/service/populate-workflow.service.js +124 -0
- package/dist/module/workflow/service/populate-workflow.service.js.map +1 -0
- package/dist/module/workflow/service/stage-group.service.d.ts +13 -0
- package/dist/module/workflow/service/stage-group.service.js +39 -1
- package/dist/module/workflow/service/stage-group.service.js.map +1 -1
- package/dist/module/workflow/service/stage.service.d.ts +14 -4
- package/dist/module/workflow/service/stage.service.js +57 -13
- package/dist/module/workflow/service/stage.service.js.map +1 -1
- package/dist/module/workflow/service/task.service.d.ts +18 -0
- package/dist/module/workflow/service/task.service.js +63 -0
- package/dist/module/workflow/service/task.service.js.map +1 -0
- package/dist/module/workflow/service/workflow-list-master.service.js +4 -4
- package/dist/module/workflow/service/workflow-meta.service.d.ts +20 -0
- package/dist/module/workflow/service/workflow-meta.service.js +137 -0
- package/dist/module/workflow/service/workflow-meta.service.js.map +1 -0
- package/dist/module/workflow/service/workflow.service.d.ts +28 -5
- package/dist/module/workflow/service/workflow.service.js +108 -41
- package/dist/module/workflow/service/workflow.service.js.map +1 -1
- package/dist/module/workflow/workflow.module.js +82 -15
- package/dist/module/workflow/workflow.module.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/constant/global.constant.ts +3 -1
- package/src/module/enterprise/repository/school.repository.ts +23 -2
- package/src/module/filter/controller/filter.controller.ts +10 -4
- package/src/module/filter/dto/filter-request.dto.ts +1 -0
- package/src/module/filter/service/filter.service.ts +39 -5
- package/src/module/layout_preference/controller/layout_preference.controller.ts +6 -4
- package/src/module/layout_preference/entity/layout_preference.entity.ts +11 -0
- package/src/module/layout_preference/repository/layout_preference.repository.ts +6 -2
- package/src/module/layout_preference/service/layout_preference.service.ts +31 -6
- package/src/module/listmaster/entity/list-master-items.entity.ts +5 -5
- package/src/module/meta/controller/media.controller.ts +5 -7
- package/src/module/meta/entity/base-entity.entity.ts +1 -1
- package/src/module/module/controller/module-access.controller.ts +9 -4
- package/src/module/module/service/module-access.service.ts +15 -8
- package/src/module/workflow/controller/action-category.controller.ts +35 -0
- package/src/module/workflow/controller/action.controller.ts +73 -0
- package/src/module/workflow/controller/comm-template.controller.ts +32 -0
- package/src/module/workflow/controller/entity-modification.controller.ts +35 -0
- package/src/module/workflow/controller/stage-group.controller.ts +33 -0
- package/src/module/workflow/controller/stage.controller.ts +50 -0
- package/src/module/workflow/controller/task.controller.ts +57 -0
- package/src/module/workflow/controller/workflow-meta.controller.ts +76 -0
- package/src/module/workflow/controller/workflow.controller.ts +32 -12
- package/src/module/workflow/entity/action-category.entity.ts +3 -0
- package/src/module/workflow/entity/action-data.entity.ts +43 -0
- package/src/module/workflow/entity/action.entity.ts +18 -3
- package/src/module/workflow/entity/comm-template.entity.ts +18 -1
- package/src/module/workflow/entity/entity-modification.entity.ts +38 -0
- package/src/module/workflow/entity/stage-group.entity.ts +1 -1
- package/src/module/workflow/entity/stage-movement-data.entity.ts +12 -0
- package/src/module/workflow/entity/stage.entity.ts +4 -4
- package/src/module/workflow/entity/task-data.entity.ts +73 -0
- package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -0
- package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -0
- package/src/module/workflow/entity/workflow.entity.ts +6 -0
- package/src/module/workflow/repository/action-data.repository.ts +93 -0
- package/src/module/workflow/repository/action.repository.ts +104 -0
- package/src/module/workflow/repository/comm-template.repository.ts +102 -0
- package/src/module/workflow/repository/stage-group.repository.ts +46 -0
- package/src/module/workflow/repository/stage-movement.repository.ts +219 -0
- package/src/module/workflow/repository/stage.repository.ts +47 -0
- package/src/module/workflow/repository/task.repository.ts +85 -0
- package/src/module/workflow/repository/workflow.repository.ts +40 -2
- package/src/module/workflow/service/action-category.service.ts +26 -1
- package/src/module/workflow/service/action-data.service.ts +45 -0
- package/src/module/workflow/service/action-template-mapping.service.ts +1 -1
- package/src/module/workflow/service/action.service.ts +279 -19
- package/src/module/workflow/service/comm-template.service.ts +90 -1
- package/src/module/workflow/service/entity-modification.service.ts +67 -0
- package/src/module/workflow/service/populate-workflow.service.ts +189 -0
- package/src/module/workflow/service/stage-group.service.ts +67 -2
- package/src/module/workflow/service/stage.service.ts +104 -28
- package/src/module/workflow/service/task.service.ts +95 -0
- package/src/module/workflow/service/workflow-list-master.service.ts +4 -4
- package/src/module/workflow/service/workflow-meta.service.ts +231 -0
- package/src/module/workflow/service/workflow.service.ts +181 -50
- package/src/module/workflow/workflow.module.ts +82 -15
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { log } from 'console';
|
|
2
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
3
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
4
|
+
import { Repository, DataSource } from 'typeorm';
|
|
5
|
+
import { StageMovementData } from '../entity/stage-movement-data.entity';
|
|
6
|
+
import { UserData } from 'src/module/user/entity/user.entity';
|
|
7
|
+
import { StageMovementRepository } from '../repository/stage-movement.repository';
|
|
8
|
+
import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
|
|
9
|
+
import { ActionDataService } from './action-data.service';
|
|
10
|
+
import { TaskService } from './task.service';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class WorkflowMetaService extends EntityServiceImpl {
|
|
14
|
+
constructor(
|
|
15
|
+
@InjectRepository(StageMovementData)
|
|
16
|
+
private readonly stageMovementRepo: Repository<StageMovementData>,
|
|
17
|
+
private readonly stageMovementRepository: StageMovementRepository,
|
|
18
|
+
private readonly dataSource: DataSource,
|
|
19
|
+
private readonly actionDataService: ActionDataService,
|
|
20
|
+
@Inject('TaskService')
|
|
21
|
+
private readonly taskService: TaskService,
|
|
22
|
+
) {
|
|
23
|
+
super();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// get first stage from stage table
|
|
27
|
+
async getFirstStage(
|
|
28
|
+
loggedInUser: UserData,
|
|
29
|
+
mapped_entity_type: string,
|
|
30
|
+
mapped_entity_id: number,
|
|
31
|
+
): Promise<any | null> {
|
|
32
|
+
// step1 find in workflow_level_mapping if not found with current level_id and level_type search in for ORG
|
|
33
|
+
// step2 find in stage_group => workflow_id
|
|
34
|
+
// step3 find in stage => stage_group_id
|
|
35
|
+
// step4 get first stage from stage table
|
|
36
|
+
return this.stageMovementRepository.getFirstStage({
|
|
37
|
+
loggedInUser,
|
|
38
|
+
mapped_entity_type,
|
|
39
|
+
mapped_entity_id,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get the current active stage for a given mapped entity
|
|
45
|
+
*/
|
|
46
|
+
async getCurrentStage(
|
|
47
|
+
mapped_entity_type: string,
|
|
48
|
+
mapped_entity_id: number,
|
|
49
|
+
loggedInUser: UserData,
|
|
50
|
+
): Promise<any | null> {
|
|
51
|
+
// Try to find the current stage movement entry
|
|
52
|
+
let currentStage = await this.stageMovementRepo.findOne({
|
|
53
|
+
where: {
|
|
54
|
+
mapped_entity_type,
|
|
55
|
+
mapped_entity_id,
|
|
56
|
+
is_current: 'Y',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (!currentStage) {
|
|
61
|
+
// If no current stage found, return null
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// get group name for the current stage
|
|
66
|
+
const getGroupName = await this.dataSource.query(
|
|
67
|
+
`SELECT name FROM cr_wf_stage_group WHERE id = ${currentStage?.stage_group_id}`,
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
// Return the found or newly created current stage movement
|
|
71
|
+
return {
|
|
72
|
+
...currentStage,
|
|
73
|
+
stage_group_name: getGroupName[0]?.name,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get next stage ID based on current stage
|
|
79
|
+
* (Stub logic – replace with real stage transition resolution)
|
|
80
|
+
*/
|
|
81
|
+
async getNextStage(currentStage: any): Promise<any | null> {
|
|
82
|
+
// get all stage for that stage group
|
|
83
|
+
const nextStage =
|
|
84
|
+
await this.stageMovementRepository.getNextStageOrFirstOfNextGroup(
|
|
85
|
+
currentStage?.stage_group_id,
|
|
86
|
+
currentStage?.stage_id,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
if (!nextStage) {
|
|
90
|
+
return { hasNextStage: false, nextStage: null };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const groupName = await this.dataSource.query(
|
|
94
|
+
`SELECT name FROM cr_wf_stage_group WHERE id = ${nextStage?.stage_group_id}`,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
hasNextStage: !!nextStage,
|
|
99
|
+
nextStage: { ...nextStage, stage_group_name: groupName[0]?.name },
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Move mapped entity to the next stage in the workflow
|
|
105
|
+
*/
|
|
106
|
+
async moveToNextStage(
|
|
107
|
+
mapped_entity_type: string,
|
|
108
|
+
mapped_entity_id: number,
|
|
109
|
+
loggedInUser: UserData,
|
|
110
|
+
): Promise<string> {
|
|
111
|
+
const now = new Date();
|
|
112
|
+
let currentStage = await this.getCurrentStage(
|
|
113
|
+
mapped_entity_type,
|
|
114
|
+
mapped_entity_id,
|
|
115
|
+
loggedInUser,
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
// Case 1: First stage – initialize
|
|
119
|
+
// If no current stage movement found, create one from the first stage
|
|
120
|
+
if (!currentStage) {
|
|
121
|
+
const getAllResult = await this.getFirstStage(
|
|
122
|
+
loggedInUser,
|
|
123
|
+
mapped_entity_type,
|
|
124
|
+
mapped_entity_id,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
const { mappingUsed, stageGroup, firstStage } = getAllResult;
|
|
128
|
+
|
|
129
|
+
// Create a new current stage movement record
|
|
130
|
+
currentStage = await this.stageMovementRepo.save({
|
|
131
|
+
entity_type: 'STGM',
|
|
132
|
+
mapped_entity_type,
|
|
133
|
+
mapped_entity_id,
|
|
134
|
+
name: firstStage.name,
|
|
135
|
+
status: firstStage.status,
|
|
136
|
+
current_user_id: loggedInUser.id,
|
|
137
|
+
stage_action_mapping_id: firstStage.id,
|
|
138
|
+
stage_group_id: stageGroup.id,
|
|
139
|
+
stage_id: firstStage.id,
|
|
140
|
+
start_date: new Date(),
|
|
141
|
+
is_current: 'Y',
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
this.populateActionService(
|
|
145
|
+
currentStage.stage_id,
|
|
146
|
+
loggedInUser,
|
|
147
|
+
mapped_entity_id,
|
|
148
|
+
mapped_entity_type,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
return `Initialized workflow with first stage (Stage ID: ${firstStage.id}).`;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
//idhr
|
|
155
|
+
|
|
156
|
+
// Case 2: Has next stage – move forward
|
|
157
|
+
const stageDate = await this.getNextStage(currentStage);
|
|
158
|
+
|
|
159
|
+
if (stageDate.hasNextStage) {
|
|
160
|
+
const { nextStage } = stageDate;
|
|
161
|
+
// Close current stage
|
|
162
|
+
currentStage.end_date = now;
|
|
163
|
+
currentStage.is_current = 'N';
|
|
164
|
+
await this.stageMovementRepo.save(currentStage);
|
|
165
|
+
|
|
166
|
+
// Insert next stage
|
|
167
|
+
await this.stageMovementRepo.save({
|
|
168
|
+
entity_type: 'STGM',
|
|
169
|
+
mapped_entity_type,
|
|
170
|
+
mapped_entity_id,
|
|
171
|
+
name: nextStage.name,
|
|
172
|
+
status: nextStage.status,
|
|
173
|
+
current_user_id: loggedInUser.id,
|
|
174
|
+
stage_action_mapping_id: nextStage.id,
|
|
175
|
+
start_date: now,
|
|
176
|
+
stage_group_id: nextStage?.stage_group_id,
|
|
177
|
+
stage_id: nextStage.id,
|
|
178
|
+
is_current: 'Y',
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
this.populateActionService(
|
|
182
|
+
currentStage.stage_id,
|
|
183
|
+
loggedInUser,
|
|
184
|
+
mapped_entity_id,
|
|
185
|
+
mapped_entity_type,
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
return `Moved to next stage (Stage ID: ${nextStage.id}).`;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
//idhr
|
|
192
|
+
|
|
193
|
+
// Case 3: No next stage – mark workflow as done
|
|
194
|
+
currentStage.end_date = now;
|
|
195
|
+
currentStage.is_current = 'N';
|
|
196
|
+
await this.stageMovementRepo.save(currentStage);
|
|
197
|
+
|
|
198
|
+
return 'Workflow completed. No next stage available.';
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async populateActionService(
|
|
202
|
+
stage_id: number,
|
|
203
|
+
loggedInUser: UserData,
|
|
204
|
+
mapped_entity_id: number,
|
|
205
|
+
mapped_entity_type: string,
|
|
206
|
+
): Promise<any> {
|
|
207
|
+
const actions =
|
|
208
|
+
await this.stageMovementRepository.getAllActionByStageId(stage_id);
|
|
209
|
+
// Populate the action service with the retrieved actions
|
|
210
|
+
|
|
211
|
+
if (!actions || actions.length === 0) {
|
|
212
|
+
return 'No actions found for this stage.';
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// save in action data
|
|
216
|
+
await this.actionDataService.saveActionData(
|
|
217
|
+
actions,
|
|
218
|
+
loggedInUser,
|
|
219
|
+
mapped_entity_id,
|
|
220
|
+
mapped_entity_type,
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
// save in task data
|
|
224
|
+
await this.taskService.saveActionData(
|
|
225
|
+
actions,
|
|
226
|
+
loggedInUser,
|
|
227
|
+
mapped_entity_id,
|
|
228
|
+
mapped_entity_type,
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -1,26 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { get } from 'http';
|
|
2
|
+
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
|
|
3
|
+
import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
|
|
4
|
+
import { DataSource, In } from 'typeorm';
|
|
5
|
+
import { WorkflowRepository } from '../repository/workflow.repository';
|
|
6
|
+
import { BaseEntity } from 'src/module/meta/entity/base-entity.entity';
|
|
2
7
|
import { UserData } from 'src/module/user/entity/user.entity';
|
|
3
|
-
import {
|
|
8
|
+
import { ListMasterService } from 'src/module/listmaster/service/list-master.service';
|
|
9
|
+
import { STATUS_INACTIVE, WORKFLOW } from 'src/constant/global.constant';
|
|
10
|
+
import { Workflow } from '../entity/workflow.entity';
|
|
11
|
+
|
|
12
|
+
import { StageGroupRepository } from '../repository/stage-group.repository';
|
|
13
|
+
import { StageGroupService } from './stage-group.service';
|
|
4
14
|
|
|
5
15
|
@Injectable()
|
|
6
|
-
export class WorkflowService {
|
|
7
|
-
constructor(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AND level_type = ?
|
|
19
|
-
`,
|
|
20
|
-
[entity_type, level_id, level_type],
|
|
21
|
-
);
|
|
16
|
+
export class WorkflowService extends EntityServiceImpl {
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly dataSource: DataSource,
|
|
19
|
+
private readonly workflowRepository: WorkflowRepository,
|
|
20
|
+
@Inject('ListMasterService')
|
|
21
|
+
private readonly listMasterService: ListMasterService,
|
|
22
|
+
@Inject('StageGroupService')
|
|
23
|
+
private readonly stateGroupService: StageGroupService,
|
|
24
|
+
private readonly stageGroupRepository: StageGroupRepository,
|
|
25
|
+
) {
|
|
26
|
+
super();
|
|
27
|
+
}
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
async getAllWorkflows(
|
|
30
|
+
entity_type: string,
|
|
31
|
+
level_id: string,
|
|
32
|
+
level_type: string,
|
|
33
|
+
) {
|
|
34
|
+
return this.workflowRepository.getAllWorkflowsByFilters(
|
|
35
|
+
entity_type,
|
|
36
|
+
level_id,
|
|
37
|
+
level_type,
|
|
38
|
+
);
|
|
24
39
|
}
|
|
25
40
|
|
|
26
41
|
async getWorkflowById(id: number) {
|
|
@@ -31,50 +46,166 @@ export class WorkflowService {
|
|
|
31
46
|
return result[0] || null;
|
|
32
47
|
}
|
|
33
48
|
|
|
49
|
+
//update entity
|
|
34
50
|
async updateEntity(
|
|
35
51
|
entityData: BaseEntity,
|
|
36
52
|
loggedInUser: UserData,
|
|
37
|
-
): Promise<any> {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
`SELECT phone_number, father_mobile, mother_mobile, email, father_email, mother_email
|
|
42
|
-
FROM crm_lead
|
|
43
|
-
WHERE id = ?`,
|
|
44
|
-
[leadId],
|
|
53
|
+
): Promise<any> {
|
|
54
|
+
const resolveStatus = await this.listMasterService.getResolvedListCode(
|
|
55
|
+
STATUS_INACTIVE,
|
|
56
|
+
loggedInUser?.organization_id || 0,
|
|
45
57
|
);
|
|
46
58
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
59
|
+
const workflowId = entityData.id;
|
|
60
|
+
const { level_id, level_type, organization_id } = loggedInUser;
|
|
50
61
|
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
// Handle INACTIVE status validation
|
|
63
|
+
if (entityData.status == resolveStatus.id) {
|
|
64
|
+
const existingWorkflow = (await this.getEntityData(
|
|
65
|
+
WORKFLOW,
|
|
66
|
+
workflowId,
|
|
67
|
+
loggedInUser,
|
|
68
|
+
)) as Workflow;
|
|
53
69
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
response.push({ label: 'Primary', value: data.phone_number });
|
|
70
|
+
if (!existingWorkflow) {
|
|
71
|
+
return { success: false, error: 'Workflow not found' };
|
|
57
72
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
|
|
74
|
+
if (existingWorkflow.is_default) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: 'Cannot inactivate because it is default.',
|
|
78
|
+
};
|
|
63
79
|
}
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
|
|
80
|
+
|
|
81
|
+
if (existingWorkflow.is_factory) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
error: 'Cannot inactivate because it is factory.',
|
|
85
|
+
};
|
|
67
86
|
}
|
|
68
|
-
|
|
69
|
-
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Handle is_default uniqueness logic within same level
|
|
90
|
+
if ((entityData as Workflow).is_default == true) {
|
|
91
|
+
// Step 1: Get previous default workflow for same level_id and level_type
|
|
92
|
+
const oldDefault = await this.dataSource.query(
|
|
93
|
+
`
|
|
94
|
+
SELECT id FROM cr_workflow
|
|
95
|
+
WHERE level_id = ? AND level_type = ?
|
|
96
|
+
`,
|
|
97
|
+
[level_id, level_type],
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
if (oldDefault?.length) {
|
|
101
|
+
const oldWorkflowId = oldDefault[0].id;
|
|
102
|
+
|
|
103
|
+
// Step 2: Update old workflow to is_default = 0
|
|
104
|
+
await this.dataSource
|
|
105
|
+
.createQueryBuilder()
|
|
106
|
+
.update(Workflow)
|
|
107
|
+
.set({ is_default: 0 })
|
|
108
|
+
.where('id = :id', { id: oldWorkflowId })
|
|
109
|
+
.execute();
|
|
110
|
+
|
|
111
|
+
// Step 3: Update cr_workflow_level_mapping to point to new workflowId
|
|
112
|
+
await this.dataSource.query(
|
|
113
|
+
`
|
|
114
|
+
UPDATE cr_workflow_level_mapping
|
|
115
|
+
SET workflow_id = ?
|
|
116
|
+
WHERE mapped_level_id = ? AND mapped_level_type = ?
|
|
117
|
+
`,
|
|
118
|
+
[workflowId, level_id, level_type],
|
|
119
|
+
);
|
|
70
120
|
}
|
|
71
|
-
|
|
72
|
-
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Final update
|
|
124
|
+
return super.updateEntity(entityData, loggedInUser);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async deleteWorkflowById(id: number) {
|
|
128
|
+
return this.workflowRepository.deleteWorkflowById(id);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async deleteEntity(
|
|
132
|
+
entityType: string,
|
|
133
|
+
id: number,
|
|
134
|
+
loggedInUser: UserData,
|
|
135
|
+
): Promise<any> {
|
|
136
|
+
const getWorkflow = await this.getEntityData(entityType, id, loggedInUser);
|
|
137
|
+
|
|
138
|
+
if (!getWorkflow) {
|
|
139
|
+
throw new BadRequestException('Workflow not found');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if ((getWorkflow as Workflow).is_default) {
|
|
143
|
+
throw new BadRequestException(
|
|
144
|
+
'Cannot delete workflow because it is default.',
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if ((getWorkflow as Workflow).is_factory) {
|
|
149
|
+
throw new BadRequestException(
|
|
150
|
+
'Cannot delete workflow because it is factory.',
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const getAllStageGroup = await this.dataSource.query(
|
|
155
|
+
`SELECT id FROM cr_wf_stage_group WHERE workflow_id = ? AND level_id = ? AND level_type = ?`,
|
|
156
|
+
[id, loggedInUser.level_id, loggedInUser.level_type],
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
if (getAllStageGroup.length > 0) {
|
|
160
|
+
for (const stageGroup of getAllStageGroup) {
|
|
161
|
+
await this.stateGroupService.deleteEntity(
|
|
162
|
+
'STGP',
|
|
163
|
+
stageGroup.id,
|
|
164
|
+
loggedInUser,
|
|
165
|
+
);
|
|
73
166
|
}
|
|
74
|
-
} else {
|
|
75
|
-
throw new BadRequestException('Invalid mode');
|
|
76
167
|
}
|
|
77
168
|
|
|
78
|
-
|
|
169
|
+
const deleteWorkflow = await super.deleteEntity(
|
|
170
|
+
entityType,
|
|
171
|
+
id,
|
|
172
|
+
loggedInUser,
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
return deleteWorkflow;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async updateSequence(body: any[], loggedInUser: any) {
|
|
179
|
+
if (!Array.isArray(body) || body.length === 0) {
|
|
180
|
+
throw new BadRequestException(
|
|
181
|
+
'Invalid input. Expected a non-empty array.',
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const results: {
|
|
186
|
+
id: any;
|
|
187
|
+
success: boolean;
|
|
188
|
+
result?: any;
|
|
189
|
+
error?: string;
|
|
190
|
+
}[] = [];
|
|
191
|
+
|
|
192
|
+
for (const item of body) {
|
|
193
|
+
if (!item.id || item.sequence === undefined) {
|
|
194
|
+
results.push({
|
|
195
|
+
id: item.id || null,
|
|
196
|
+
success: false,
|
|
197
|
+
error: 'Missing id or sequence',
|
|
198
|
+
});
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
try {
|
|
203
|
+
const result = await super.updateEntity(item, loggedInUser);
|
|
204
|
+
results.push({ id: item.id, success: true, result });
|
|
205
|
+
} catch (err) {
|
|
206
|
+
results.push({ id: item.id, success: false, error: err.message });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return { updated: results.filter((r) => r.success).length, results };
|
|
79
210
|
}
|
|
80
211
|
}
|
|
@@ -1,40 +1,75 @@
|
|
|
1
1
|
import { Module } from '@nestjs/common';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
3
|
+
import { ListMasterModule } from '../listmaster/listmaster.module';
|
|
4
|
+
import { EntityModule } from '../meta/entity.module';
|
|
5
|
+
import { ActionTemplateMappingController } from './controller/action-template-mapping.controller';
|
|
6
|
+
import { ActionController } from './controller/action.controller';
|
|
7
|
+
import { CommTemplateController } from './controller/comm-template.controller';
|
|
8
|
+
import { EntityModificationController } from './controller/entity-modification.controller';
|
|
9
|
+
import { StageGroupController } from './controller/stage-group.controller';
|
|
10
|
+
import { StageController } from './controller/stage.controller';
|
|
11
|
+
import { WorkflowListMasterController } from './controller/workflow-list-master.controller';
|
|
12
|
+
import { WorkflowMetaController } from './controller/workflow-meta.controller';
|
|
13
|
+
import { WorkflowController } from './controller/workflow.controller';
|
|
6
14
|
import { ActionCategory } from './entity/action-category.entity';
|
|
7
|
-
import { CommTemplate } from './entity/comm-template.entity';
|
|
8
15
|
import { ActionTemplateMapping } from './entity/action-template-mapping.entity';
|
|
16
|
+
import { ActionEntity } from './entity/action.entity';
|
|
17
|
+
import { CommTemplate } from './entity/comm-template.entity';
|
|
18
|
+
import { EntityModification } from './entity/entity-modification.entity';
|
|
9
19
|
import { StageActionMapping } from './entity/stage-action-mapping.entity';
|
|
20
|
+
import { StageGroup } from './entity/stage-group.entity';
|
|
21
|
+
import { StageMovementData } from './entity/stage-movement-data.entity';
|
|
22
|
+
import { Stage } from './entity/stage.entity';
|
|
23
|
+
import { TemplateAttach } from './entity/template-attach-mapper.entity';
|
|
24
|
+
import { Workflow } from './entity/workflow.entity';
|
|
25
|
+
import { CommTemplateRepository } from './repository/comm-template.repository';
|
|
26
|
+
import { StageGroupRepository } from './repository/stage-group.repository';
|
|
27
|
+
import { StageRepository } from './repository/stage.repository';
|
|
28
|
+
import { WorkflowRepository } from './repository/workflow.repository';
|
|
10
29
|
import { ActionCategoryService } from './service/action-category.service';
|
|
11
|
-
import { CommTemplateService } from './service/comm-template.service';
|
|
12
|
-
import { StageActionMappingService } from './service/stage-action-mapping.service';
|
|
13
30
|
import { ActionTemplateMappingService } from './service/action-template-mapping.service';
|
|
14
31
|
import { ActionService } from './service/action.service';
|
|
15
|
-
import {
|
|
32
|
+
import { CommTemplateService } from './service/comm-template.service';
|
|
33
|
+
import { EntityModificationService } from './service/entity-modification.service';
|
|
34
|
+
import { PopulateWorkflowService } from './service/populate-workflow.service';
|
|
35
|
+
import { StageActionMappingService } from './service/stage-action-mapping.service';
|
|
16
36
|
import { StageGroupService } from './service/stage-group.service';
|
|
17
|
-
import {
|
|
18
|
-
import { EntityModule } from '../meta/entity.module';
|
|
19
|
-
import { Action } from './entity/action.entity';
|
|
37
|
+
import { StageService } from './service/stage.service';
|
|
20
38
|
import { WorkflowListMasterService } from './service/workflow-list-master.service';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
39
|
+
import { WorkflowMetaService } from './service/workflow-meta.service';
|
|
40
|
+
import { WorkflowService } from './service/workflow.service';
|
|
41
|
+
import { ActionCategoryController } from './controller/action-category.controller';
|
|
42
|
+
import { StageMovementRepository } from './repository/stage-movement.repository';
|
|
43
|
+
import { WorkflowLevelMappingEntity } from './entity/workflow-level-mapping.entity';
|
|
44
|
+
import { TaskDataEntity } from './entity/task-data.entity';
|
|
45
|
+
import { ActionDataEntity } from './entity/action-data.entity';
|
|
46
|
+
import { TaskController } from './controller/task.controller';
|
|
47
|
+
import { TaskService } from './service/task.service';
|
|
48
|
+
import { TaskRepository } from './repository/task.repository';
|
|
49
|
+
import { ActionRepository } from './repository/action.repository';
|
|
50
|
+
import { ActionDataRepository } from './repository/action-data.repository';
|
|
51
|
+
import { ActionDataService } from './service/action-data.service';
|
|
24
52
|
|
|
25
53
|
@Module({
|
|
26
54
|
imports: [
|
|
27
55
|
TypeOrmModule.forFeature([
|
|
28
56
|
Workflow,
|
|
29
|
-
|
|
57
|
+
ActionEntity,
|
|
30
58
|
ActionCategory,
|
|
31
59
|
Stage,
|
|
32
60
|
StageGroup,
|
|
33
61
|
CommTemplate,
|
|
34
62
|
ActionTemplateMapping,
|
|
35
63
|
StageActionMapping,
|
|
64
|
+
StageMovementData,
|
|
65
|
+
EntityModification,
|
|
66
|
+
TemplateAttach,
|
|
67
|
+
WorkflowLevelMappingEntity,
|
|
68
|
+
TaskDataEntity,
|
|
69
|
+
ActionDataEntity,
|
|
36
70
|
]),
|
|
37
71
|
EntityModule,
|
|
72
|
+
ListMasterModule,
|
|
38
73
|
],
|
|
39
74
|
providers: [
|
|
40
75
|
{ provide: 'ActionCategoryService', useClass: ActionCategoryService },
|
|
@@ -45,10 +80,28 @@ import { WorkflowController } from './controller/workflow.controller';
|
|
|
45
80
|
},
|
|
46
81
|
{ provide: 'ActionService', useClass: ActionService },
|
|
47
82
|
{ provide: 'StageService', useClass: StageService },
|
|
83
|
+
{ provide: 'TaskService', useClass: TaskService },
|
|
48
84
|
{ provide: 'StageGroupService', useClass: StageGroupService },
|
|
85
|
+
{ provide: 'WorkflowService', useClass: WorkflowService },
|
|
86
|
+
{
|
|
87
|
+
provide: 'EntityModificationService',
|
|
88
|
+
useClass: EntityModificationService,
|
|
89
|
+
},
|
|
49
90
|
WorkflowListMasterService,
|
|
50
91
|
ActionTemplateMappingService,
|
|
92
|
+
WorkflowRepository,
|
|
93
|
+
CommTemplateService,
|
|
94
|
+
CommTemplateRepository,
|
|
95
|
+
StageGroupRepository,
|
|
96
|
+
StageRepository,
|
|
51
97
|
WorkflowService,
|
|
98
|
+
WorkflowMetaService,
|
|
99
|
+
PopulateWorkflowService,
|
|
100
|
+
StageMovementRepository,
|
|
101
|
+
TaskRepository,
|
|
102
|
+
ActionRepository,
|
|
103
|
+
ActionDataRepository,
|
|
104
|
+
ActionDataService,
|
|
52
105
|
],
|
|
53
106
|
exports: [
|
|
54
107
|
'ActionCategoryService',
|
|
@@ -57,11 +110,25 @@ import { WorkflowController } from './controller/workflow.controller';
|
|
|
57
110
|
'ActionService',
|
|
58
111
|
'StageService',
|
|
59
112
|
'StageGroupService',
|
|
113
|
+
'EntityModificationService',
|
|
114
|
+
WorkflowRepository,
|
|
115
|
+
StageGroupRepository,
|
|
116
|
+
StageRepository,
|
|
117
|
+
WorkflowMetaService,
|
|
118
|
+
PopulateWorkflowService,
|
|
60
119
|
],
|
|
61
120
|
controllers: [
|
|
62
121
|
WorkflowListMasterController,
|
|
63
122
|
ActionTemplateMappingController,
|
|
64
123
|
WorkflowController,
|
|
124
|
+
CommTemplateController,
|
|
125
|
+
StageGroupController,
|
|
126
|
+
StageController,
|
|
127
|
+
ActionController,
|
|
128
|
+
WorkflowMetaController,
|
|
129
|
+
EntityModificationController,
|
|
130
|
+
ActionCategoryController,
|
|
131
|
+
TaskController,
|
|
65
132
|
],
|
|
66
133
|
})
|
|
67
134
|
export class WorkflowModule {}
|