rez_core 2.2.8 → 2.2.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 (213) hide show
  1. package/dist/constant/global.constant.d.ts +2 -1
  2. package/dist/constant/global.constant.js +3 -2
  3. package/dist/constant/global.constant.js.map +1 -1
  4. package/dist/module/filter/controller/filter.controller.d.ts +1 -1
  5. package/dist/module/filter/controller/filter.controller.js +7 -4
  6. package/dist/module/filter/controller/filter.controller.js.map +1 -1
  7. package/dist/module/filter/dto/filter-request.dto.d.ts +1 -0
  8. package/dist/module/filter/service/filter.service.js +25 -3
  9. package/dist/module/filter/service/filter.service.js.map +1 -1
  10. package/dist/module/layout_preference/controller/layout_preference.controller.js +4 -4
  11. package/dist/module/layout_preference/controller/layout_preference.controller.js.map +1 -1
  12. package/dist/module/layout_preference/entity/layout_preference.entity.d.ts +2 -0
  13. package/dist/module/layout_preference/entity/layout_preference.entity.js +13 -0
  14. package/dist/module/layout_preference/entity/layout_preference.entity.js.map +1 -1
  15. package/dist/module/layout_preference/repository/layout_preference.repository.d.ts +1 -1
  16. package/dist/module/layout_preference/repository/layout_preference.repository.js +4 -2
  17. package/dist/module/layout_preference/repository/layout_preference.repository.js.map +1 -1
  18. package/dist/module/layout_preference/service/layout_preference.service.d.ts +1 -1
  19. package/dist/module/layout_preference/service/layout_preference.service.js +17 -4
  20. package/dist/module/layout_preference/service/layout_preference.service.js.map +1 -1
  21. package/dist/module/listmaster/entity/list-master-items.entity.js +5 -5
  22. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  23. package/dist/module/meta/controller/media.controller.d.ts +1 -1
  24. package/dist/module/meta/controller/media.controller.js +1 -1
  25. package/dist/module/meta/controller/media.controller.js.map +1 -1
  26. package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
  27. package/dist/module/module/controller/module-access.controller.d.ts +1 -1
  28. package/dist/module/module/controller/module-access.controller.js +6 -6
  29. package/dist/module/module/controller/module-access.controller.js.map +1 -1
  30. package/dist/module/module/service/module-access.service.d.ts +2 -1
  31. package/dist/module/module/service/module-access.service.js +5 -3
  32. package/dist/module/module/service/module-access.service.js.map +1 -1
  33. package/dist/module/workflow/controller/action-category.controller.d.ts +8 -0
  34. package/dist/module/workflow/controller/action-category.controller.js +45 -0
  35. package/dist/module/workflow/controller/action-category.controller.js.map +1 -0
  36. package/dist/module/workflow/controller/action.controller.d.ts +28 -0
  37. package/dist/module/workflow/controller/action.controller.js +88 -0
  38. package/dist/module/workflow/controller/action.controller.js.map +1 -0
  39. package/dist/module/workflow/controller/comm-template.controller.d.ts +11 -0
  40. package/dist/module/workflow/controller/comm-template.controller.js +44 -0
  41. package/dist/module/workflow/controller/comm-template.controller.js.map +1 -0
  42. package/dist/module/workflow/controller/entity-modification.controller.d.ts +8 -0
  43. package/dist/module/workflow/controller/entity-modification.controller.js +44 -0
  44. package/dist/module/workflow/controller/entity-modification.controller.js.map +1 -0
  45. package/dist/module/workflow/controller/stage-group.controller.d.ts +10 -0
  46. package/dist/module/workflow/controller/stage-group.controller.js +43 -0
  47. package/dist/module/workflow/controller/stage-group.controller.js.map +1 -0
  48. package/dist/module/workflow/controller/stage.controller.d.ts +13 -0
  49. package/dist/module/workflow/controller/stage.controller.js +56 -0
  50. package/dist/module/workflow/controller/stage.controller.js.map +1 -0
  51. package/dist/module/workflow/controller/task.controller.d.ts +21 -0
  52. package/dist/module/workflow/controller/task.controller.js +58 -0
  53. package/dist/module/workflow/controller/task.controller.js.map +1 -0
  54. package/dist/module/workflow/controller/workflow-meta.controller.d.ts +15 -0
  55. package/dist/module/workflow/controller/workflow-meta.controller.js +70 -0
  56. package/dist/module/workflow/controller/workflow-meta.controller.js.map +1 -0
  57. package/dist/module/workflow/controller/workflow.controller.d.ts +25 -10
  58. package/dist/module/workflow/controller/workflow.controller.js +32 -15
  59. package/dist/module/workflow/controller/workflow.controller.js.map +1 -1
  60. package/dist/module/workflow/entity/action-category.entity.d.ts +1 -0
  61. package/dist/module/workflow/entity/action-category.entity.js +4 -0
  62. package/dist/module/workflow/entity/action-category.entity.js.map +1 -1
  63. package/dist/module/workflow/entity/action-data.entity.d.ts +15 -0
  64. package/dist/module/workflow/entity/action-data.entity.js +70 -0
  65. package/dist/module/workflow/entity/action-data.entity.js.map +1 -0
  66. package/dist/module/workflow/entity/action.entity.d.ts +7 -2
  67. package/dist/module/workflow/entity/action.entity.js +30 -10
  68. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  69. package/dist/module/workflow/entity/comm-template.entity.d.ts +5 -0
  70. package/dist/module/workflow/entity/comm-template.entity.js +21 -1
  71. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  72. package/dist/module/workflow/entity/entity-modification.entity.d.ts +13 -0
  73. package/dist/module/workflow/entity/entity-modification.entity.js +63 -0
  74. package/dist/module/workflow/entity/entity-modification.entity.js.map +1 -0
  75. package/dist/module/workflow/entity/stage-group.entity.d.ts +1 -1
  76. package/dist/module/workflow/entity/stage-group.entity.js +1 -1
  77. package/dist/module/workflow/entity/stage-group.entity.js.map +1 -1
  78. package/dist/module/workflow/entity/stage-movement-data.entity.d.ts +4 -0
  79. package/dist/module/workflow/entity/stage-movement-data.entity.js +16 -0
  80. package/dist/module/workflow/entity/stage-movement-data.entity.js.map +1 -1
  81. package/dist/module/workflow/entity/stage.entity.d.ts +2 -2
  82. package/dist/module/workflow/entity/stage.entity.js +5 -5
  83. package/dist/module/workflow/entity/stage.entity.js.map +1 -1
  84. package/dist/module/workflow/entity/task-data.entity.d.ts +25 -0
  85. package/dist/module/workflow/entity/task-data.entity.js +110 -0
  86. package/dist/module/workflow/entity/task-data.entity.js.map +1 -0
  87. package/dist/module/workflow/entity/template-attach-mapper.entity.d.ts +11 -0
  88. package/dist/module/workflow/entity/template-attach-mapper.entity.js +54 -0
  89. package/dist/module/workflow/entity/template-attach-mapper.entity.js.map +1 -0
  90. package/dist/module/workflow/entity/workflow-level-mapping.entity.d.ts +7 -0
  91. package/dist/module/workflow/entity/workflow-level-mapping.entity.js +38 -0
  92. package/dist/module/workflow/entity/workflow-level-mapping.entity.js.map +1 -0
  93. package/dist/module/workflow/entity/workflow.entity.d.ts +2 -0
  94. package/dist/module/workflow/entity/workflow.entity.js +8 -0
  95. package/dist/module/workflow/entity/workflow.entity.js.map +1 -1
  96. package/dist/module/workflow/repository/action-data.repository.d.ts +10 -0
  97. package/dist/module/workflow/repository/action-data.repository.js +85 -0
  98. package/dist/module/workflow/repository/action-data.repository.js.map +1 -0
  99. package/dist/module/workflow/repository/action.repository.d.ts +17 -0
  100. package/dist/module/workflow/repository/action.repository.js +97 -0
  101. package/dist/module/workflow/repository/action.repository.js.map +1 -0
  102. package/dist/module/workflow/repository/comm-template.repository.d.ts +14 -0
  103. package/dist/module/workflow/repository/comm-template.repository.js +87 -0
  104. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -0
  105. package/dist/module/workflow/repository/stage-group.repository.d.ts +7 -0
  106. package/dist/module/workflow/repository/stage-group.repository.js +50 -0
  107. package/dist/module/workflow/repository/stage-group.repository.js.map +1 -0
  108. package/dist/module/workflow/repository/stage-movement.repository.d.ts +23 -0
  109. package/dist/module/workflow/repository/stage-movement.repository.js +142 -0
  110. package/dist/module/workflow/repository/stage-movement.repository.js.map +1 -0
  111. package/dist/module/workflow/repository/stage.repository.d.ts +7 -0
  112. package/dist/module/workflow/repository/stage.repository.js +50 -0
  113. package/dist/module/workflow/repository/stage.repository.js.map +1 -0
  114. package/dist/module/workflow/repository/task.repository.d.ts +10 -0
  115. package/dist/module/workflow/repository/task.repository.js +77 -0
  116. package/dist/module/workflow/repository/task.repository.js.map +1 -0
  117. package/dist/module/workflow/repository/workflow.repository.d.ts +9 -1
  118. package/dist/module/workflow/repository/workflow.repository.js +38 -6
  119. package/dist/module/workflow/repository/workflow.repository.js.map +1 -1
  120. package/dist/module/workflow/service/action-category.service.d.ts +5 -0
  121. package/dist/module/workflow/service/action-category.service.js +23 -1
  122. package/dist/module/workflow/service/action-category.service.js.map +1 -1
  123. package/dist/module/workflow/service/action-data.service.d.ts +11 -0
  124. package/dist/module/workflow/service/action-data.service.js +36 -0
  125. package/dist/module/workflow/service/action-data.service.js.map +1 -0
  126. package/dist/module/workflow/service/action.service.d.ts +19 -1
  127. package/dist/module/workflow/service/action.service.js +159 -10
  128. package/dist/module/workflow/service/action.service.js.map +1 -1
  129. package/dist/module/workflow/service/comm-template.service.d.ts +11 -0
  130. package/dist/module/workflow/service/comm-template.service.js +59 -1
  131. package/dist/module/workflow/service/comm-template.service.js.map +1 -1
  132. package/dist/module/workflow/service/entity-modification.service.d.ts +8 -0
  133. package/dist/module/workflow/service/entity-modification.service.js +52 -0
  134. package/dist/module/workflow/service/entity-modification.service.js.map +1 -0
  135. package/dist/module/workflow/service/populate-workflow.service.d.ts +21 -0
  136. package/dist/module/workflow/service/populate-workflow.service.js +124 -0
  137. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -0
  138. package/dist/module/workflow/service/stage-group.service.d.ts +13 -0
  139. package/dist/module/workflow/service/stage-group.service.js +39 -1
  140. package/dist/module/workflow/service/stage-group.service.js.map +1 -1
  141. package/dist/module/workflow/service/stage.service.d.ts +14 -4
  142. package/dist/module/workflow/service/stage.service.js +57 -13
  143. package/dist/module/workflow/service/stage.service.js.map +1 -1
  144. package/dist/module/workflow/service/task.service.d.ts +18 -0
  145. package/dist/module/workflow/service/task.service.js +63 -0
  146. package/dist/module/workflow/service/task.service.js.map +1 -0
  147. package/dist/module/workflow/service/workflow-list-master.service.js +4 -4
  148. package/dist/module/workflow/service/workflow-meta.service.d.ts +20 -0
  149. package/dist/module/workflow/service/workflow-meta.service.js +137 -0
  150. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -0
  151. package/dist/module/workflow/service/workflow.service.d.ts +28 -5
  152. package/dist/module/workflow/service/workflow.service.js +108 -41
  153. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  154. package/dist/module/workflow/workflow.module.js +82 -15
  155. package/dist/module/workflow/workflow.module.js.map +1 -1
  156. package/dist/tsconfig.build.tsbuildinfo +1 -1
  157. package/package.json +1 -1
  158. package/src/constant/global.constant.ts +3 -1
  159. package/src/module/filter/controller/filter.controller.ts +10 -4
  160. package/src/module/filter/dto/filter-request.dto.ts +1 -0
  161. package/src/module/filter/service/filter.service.ts +38 -4
  162. package/src/module/layout_preference/controller/layout_preference.controller.ts +6 -4
  163. package/src/module/layout_preference/entity/layout_preference.entity.ts +11 -0
  164. package/src/module/layout_preference/repository/layout_preference.repository.ts +6 -2
  165. package/src/module/layout_preference/service/layout_preference.service.ts +31 -6
  166. package/src/module/listmaster/entity/list-master-items.entity.ts +5 -5
  167. package/src/module/meta/controller/media.controller.ts +5 -7
  168. package/src/module/meta/entity/base-entity.entity.ts +1 -1
  169. package/src/module/module/controller/module-access.controller.ts +9 -4
  170. package/src/module/module/service/module-access.service.ts +15 -8
  171. package/src/module/workflow/controller/action-category.controller.ts +35 -0
  172. package/src/module/workflow/controller/action.controller.ts +73 -0
  173. package/src/module/workflow/controller/comm-template.controller.ts +32 -0
  174. package/src/module/workflow/controller/entity-modification.controller.ts +35 -0
  175. package/src/module/workflow/controller/stage-group.controller.ts +33 -0
  176. package/src/module/workflow/controller/stage.controller.ts +50 -0
  177. package/src/module/workflow/controller/task.controller.ts +57 -0
  178. package/src/module/workflow/controller/workflow-meta.controller.ts +76 -0
  179. package/src/module/workflow/controller/workflow.controller.ts +32 -12
  180. package/src/module/workflow/entity/action-category.entity.ts +3 -0
  181. package/src/module/workflow/entity/action-data.entity.ts +43 -0
  182. package/src/module/workflow/entity/action.entity.ts +18 -3
  183. package/src/module/workflow/entity/comm-template.entity.ts +18 -1
  184. package/src/module/workflow/entity/entity-modification.entity.ts +38 -0
  185. package/src/module/workflow/entity/stage-group.entity.ts +1 -1
  186. package/src/module/workflow/entity/stage-movement-data.entity.ts +12 -0
  187. package/src/module/workflow/entity/stage.entity.ts +4 -4
  188. package/src/module/workflow/entity/task-data.entity.ts +73 -0
  189. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -0
  190. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -0
  191. package/src/module/workflow/entity/workflow.entity.ts +6 -0
  192. package/src/module/workflow/repository/action-data.repository.ts +93 -0
  193. package/src/module/workflow/repository/action.repository.ts +104 -0
  194. package/src/module/workflow/repository/comm-template.repository.ts +102 -0
  195. package/src/module/workflow/repository/stage-group.repository.ts +46 -0
  196. package/src/module/workflow/repository/stage-movement.repository.ts +219 -0
  197. package/src/module/workflow/repository/stage.repository.ts +47 -0
  198. package/src/module/workflow/repository/task.repository.ts +85 -0
  199. package/src/module/workflow/repository/workflow.repository.ts +40 -2
  200. package/src/module/workflow/service/action-category.service.ts +26 -1
  201. package/src/module/workflow/service/action-data.service.ts +45 -0
  202. package/src/module/workflow/service/action-template-mapping.service.ts +1 -1
  203. package/src/module/workflow/service/action.service.ts +279 -19
  204. package/src/module/workflow/service/comm-template.service.ts +90 -1
  205. package/src/module/workflow/service/entity-modification.service.ts +67 -0
  206. package/src/module/workflow/service/populate-workflow.service.ts +189 -0
  207. package/src/module/workflow/service/stage-group.service.ts +67 -2
  208. package/src/module/workflow/service/stage.service.ts +104 -28
  209. package/src/module/workflow/service/task.service.ts +95 -0
  210. package/src/module/workflow/service/workflow-list-master.service.ts +4 -4
  211. package/src/module/workflow/service/workflow-meta.service.ts +231 -0
  212. package/src/module/workflow/service/workflow.service.ts +181 -50
  213. 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 { BadRequestException, Injectable } from '@nestjs/common';
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 { BaseEntity, DataSource } from 'typeorm';
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(private readonly dataSource: DataSource) {}
8
-
9
- async getAllWorkflow(entity_type: string, loggedInUser: any) {
10
- const { level_id, level_type } = loggedInUser;
11
-
12
- const workflows = await this.dataSource.query(
13
- `
14
- SELECT *
15
- FROM cr_workflow
16
- WHERE mapped_entity_type = ?
17
- AND level_id = ?
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
- return workflows; // array of rows (each row is already in JSON format)
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
- async getLeadContactDropdown(leadId: number, mode: string): Promise<any[]> {
40
- const lead = await this.dataSource.query(
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
- if (!lead?.length) {
48
- throw new BadRequestException('Lead not found');
49
- }
59
+ const workflowId = entityData.id;
60
+ const { level_id, level_type, organization_id } = loggedInUser;
50
61
 
51
- const data = lead[0];
52
- const response: { label: string; value: any }[] = [];
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
- if (mode === 'sms' || mode === 'whatsapp') {
55
- if (data.phone_number) {
56
- response.push({ label: 'Primary', value: data.phone_number });
70
+ if (!existingWorkflow) {
71
+ return { success: false, error: 'Workflow not found' };
57
72
  }
58
- if (data.father_mobile) {
59
- response.push({ label: 'Father', value: data.father_mobile });
60
- }
61
- if (data.mother_mobile) {
62
- response.push({ label: 'Mother', value: data.mother_mobile });
73
+
74
+ if (existingWorkflow.is_default) {
75
+ return {
76
+ success: false,
77
+ error: 'Cannot inactivate because it is default.',
78
+ };
63
79
  }
64
- } else if (mode === 'email') {
65
- if (data.email) {
66
- response.push({ label: 'Primary', value: data.email });
80
+
81
+ if (existingWorkflow.is_factory) {
82
+ return {
83
+ success: false,
84
+ error: 'Cannot inactivate because it is factory.',
85
+ };
67
86
  }
68
- if (data.father_email) {
69
- response.push({ label: 'Father', value: data.father_email });
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
- if (data.mother_email) {
72
- response.push({ label: 'Mother', value: data.mother_email });
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
- return response;
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 { Workflow } from './entity/workflow.entity';
3
- import { WorkflowService } from './service/workflow.service';
4
- import { StageGroup } from './entity/stage-group.entity';
5
- import { Stage } from './entity/stage.entity';
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 { StageService } from './service/stage.service';
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 { TypeOrmModule } from '@nestjs/typeorm';
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 { WorkflowListMasterController } from './controller/workflow-list-master.controller';
22
- import { ActionTemplateMappingController } from './controller/action-template-mapping.controller';
23
- import { WorkflowController } from './controller/workflow.controller';
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
- Action,
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 {}