rez_core 5.0.169 → 5.0.172

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 (451) hide show
  1. package/.idea/250218_nodejs_core.iml +11 -8
  2. package/.idea/codeStyles/Project.xml +58 -58
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/modules.xml +7 -7
  5. package/.idea/vcs.xml +5 -5
  6. package/.prettierrc +3 -3
  7. package/README.md +99 -99
  8. package/dist/module/auth/guards/role.guard.js +3 -3
  9. package/dist/module/filter/repository/saved-filter.repository.js +5 -3
  10. package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
  11. package/dist/module/filter/service/filter.service.js +19 -19
  12. package/dist/module/integration/examples/usage.example.js +9 -9
  13. package/dist/module/layout_preference/controller/layout_preference.controller.js +3 -0
  14. package/dist/module/layout_preference/controller/layout_preference.controller.js.map +1 -1
  15. package/dist/module/layout_preference/service/layout_preference.service.js +1 -1
  16. package/dist/module/layout_preference/service/layout_preference.service.js.map +1 -1
  17. package/dist/module/meta/controller/entity.controller.d.ts +0 -2
  18. package/dist/module/meta/controller/entity.controller.js +0 -23
  19. package/dist/module/meta/controller/entity.controller.js.map +1 -1
  20. package/dist/module/meta/controller/meta.controller.js +5 -0
  21. package/dist/module/meta/controller/meta.controller.js.map +1 -1
  22. package/dist/module/meta/controller/view-master.controller.js +2 -0
  23. package/dist/module/meta/controller/view-master.controller.js.map +1 -1
  24. package/dist/module/meta/entity.module.js +0 -3
  25. package/dist/module/meta/entity.module.js.map +1 -1
  26. package/dist/module/meta/repository/attribute-master.repository.js +8 -8
  27. package/dist/module/meta/repository/entity-master.repository.d.ts +1 -0
  28. package/dist/module/meta/repository/entity-master.repository.js +15 -3
  29. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  30. package/dist/module/meta/repository/entity-table-column.repository.d.ts +1 -1
  31. package/dist/module/meta/repository/entity-table-column.repository.js +3 -3
  32. package/dist/module/meta/repository/entity-table-column.repository.js.map +1 -1
  33. package/dist/module/meta/repository/entity-table.repository.d.ts +2 -2
  34. package/dist/module/meta/repository/entity-table.repository.js +4 -4
  35. package/dist/module/meta/repository/entity-table.repository.js.map +1 -1
  36. package/dist/module/meta/repository/view-master.repository.d.ts +1 -1
  37. package/dist/module/meta/repository/view-master.repository.js +2 -2
  38. package/dist/module/meta/repository/view-master.repository.js.map +1 -1
  39. package/dist/module/meta/service/entity-dynamic.service.js +24 -27
  40. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  41. package/dist/module/meta/service/entity-service-impl.service.d.ts +0 -4
  42. package/dist/module/meta/service/entity-service-impl.service.js +10 -15
  43. package/dist/module/meta/service/entity-service-impl.service.js.map +1 -1
  44. package/dist/module/meta/service/entity-table-column.service.d.ts +1 -2
  45. package/dist/module/meta/service/entity-table-column.service.js +2 -10
  46. package/dist/module/meta/service/entity-table-column.service.js.map +1 -1
  47. package/dist/module/meta/service/entity-table.service.d.ts +1 -1
  48. package/dist/module/meta/service/entity-table.service.js +5 -5
  49. package/dist/module/meta/service/entity-table.service.js.map +1 -1
  50. package/dist/module/meta/service/entity-validation.service.d.ts +6 -5
  51. package/dist/module/meta/service/entity-validation.service.js +11 -12
  52. package/dist/module/meta/service/entity-validation.service.js.map +1 -1
  53. package/dist/module/meta/service/entity.service.d.ts +0 -2
  54. package/dist/module/meta/service/media-data.service.js +6 -6
  55. package/dist/module/meta/service/resolver.service.js +18 -19
  56. package/dist/module/meta/service/resolver.service.js.map +1 -1
  57. package/dist/module/meta/service/view-master.service.js +1 -1
  58. package/dist/module/meta/service/view-master.service.js.map +1 -1
  59. package/dist/module/module/repository/menu.repository.js +4 -4
  60. package/dist/module/notification/service/notification.service.js +6 -6
  61. package/dist/module/user/controller/login.controller.js +18 -18
  62. package/dist/module/workflow/repository/action.repository.js +2 -2
  63. package/dist/module/workflow/repository/stage.repository.js +8 -8
  64. package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
  65. package/dist/module/workflow/service/action.service.js +5 -5
  66. package/dist/module/workflow/service/entity-modification.service.js +2 -2
  67. package/dist/module/workflow/service/task.service.js +8 -8
  68. package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
  69. package/dist/module/workflow-automation/service/workflow-automation.service.js +4 -2
  70. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  71. package/dist/tsconfig.build.tsbuildinfo +1 -1
  72. package/dist/utils/service/reflection-helper.service.js +2 -2
  73. package/docs/modules/event-driven-integration-design.md +91 -91
  74. package/docs/modules/integration.md +250 -250
  75. package/eslint.config.mjs +34 -34
  76. package/nest-cli.json +14 -14
  77. package/package.json +125 -125
  78. package/src/app.controller.ts +12 -12
  79. package/src/app.module.ts +68 -68
  80. package/src/app.service.ts +8 -8
  81. package/src/config/bull.config.ts +69 -69
  82. package/src/config/config.module.ts +17 -17
  83. package/src/config/database.config.ts +48 -48
  84. package/src/constant/global.constant.ts +67 -67
  85. package/src/core.module.ts +94 -94
  86. package/src/decorators/roles.decorator.ts +7 -7
  87. package/src/dtos/response.dto.ts +6 -6
  88. package/src/dtos/response.ts +5 -5
  89. package/src/index.ts +1 -1
  90. package/src/module/auth/auth.module.ts +49 -49
  91. package/src/module/auth/controller/auth.controller.ts +28 -28
  92. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  93. package/src/module/auth/guards/jwt.guard.ts +22 -22
  94. package/src/module/auth/guards/role.guard.ts +68 -68
  95. package/src/module/auth/services/auth.service.ts +56 -56
  96. package/src/module/auth/services/jwt.service.ts +11 -11
  97. package/src/module/auth/strategies/google.strategy.ts +54 -54
  98. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  99. package/src/module/auth/strategies/local.strategy.ts +13 -13
  100. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  101. package/src/module/dashboard/dashboard.module.ts +21 -21
  102. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  103. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  104. package/src/module/dashboard/repository/dashboard.repository.ts +51 -51
  105. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  106. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  107. package/src/module/enterprise/enterprise.module.ts +30 -30
  108. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  109. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  110. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  111. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  112. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  113. package/src/module/enterprise/repository/school.repository.ts +272 -272
  114. package/src/module/enterprise/service/brand.service.ts +5 -5
  115. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  116. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  117. package/src/module/enterprise/service/organization.service.ts +145 -145
  118. package/src/module/entity_json/controller/entity_json.controller.ts +47 -47
  119. package/src/module/entity_json/entity/entityJson.entity.ts +39 -39
  120. package/src/module/entity_json/entity_json.module.ts +18 -18
  121. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  122. package/src/module/entity_json/service/entity_json.service.ts +242 -242
  123. package/src/module/export/controller/export.controller.ts +83 -83
  124. package/src/module/export/export.module.ts +14 -14
  125. package/src/module/export/service/export.service.ts +105 -105
  126. package/src/module/filter/controller/filter.controller.ts +84 -84
  127. package/src/module/filter/dto/filter-request.dto.ts +39 -39
  128. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  129. package/src/module/filter/entity/saved-filter-master.entity.ts +32 -32
  130. package/src/module/filter/filter.module.ts +33 -33
  131. package/src/module/filter/repository/saved-filter.repository.ts +258 -256
  132. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  133. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  134. package/src/module/filter/service/filter.service.ts +1319 -1319
  135. package/src/module/filter/service/saved-filter.service.ts +164 -164
  136. package/src/module/ics/controller/ics.controller.ts +21 -21
  137. package/src/module/ics/dto/ics.dto.ts +55 -55
  138. package/src/module/ics/ics.module.ts +13 -13
  139. package/src/module/ics/service/ics.service.ts +57 -57
  140. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  141. package/src/module/integration/controller/integration.controller.ts +662 -662
  142. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  143. package/src/module/integration/dto/create-config.dto.ts +526 -526
  144. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  145. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  146. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  147. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  148. package/src/module/integration/examples/usage.example.ts +338 -338
  149. package/src/module/integration/factories/base.factory.ts +7 -7
  150. package/src/module/integration/factories/email.factory.ts +49 -49
  151. package/src/module/integration/factories/integration.factory.ts +121 -121
  152. package/src/module/integration/factories/sms.factory.ts +51 -51
  153. package/src/module/integration/factories/telephone.factory.ts +41 -41
  154. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  155. package/src/module/integration/integration.module.ts +110 -110
  156. package/src/module/integration/service/calendar-event.service.ts +118 -118
  157. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  158. package/src/module/integration/service/integration-queue.service.ts +229 -229
  159. package/src/module/integration/service/integration.service.ts +2634 -2634
  160. package/src/module/integration/service/oauth.service.ts +224 -224
  161. package/src/module/integration/service/wrapper.service.ts +753 -753
  162. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  163. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  164. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  165. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  166. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  167. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  168. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  169. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  170. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  171. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  172. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  173. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  174. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  175. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  176. package/src/module/layout/controller/layout.controller.ts +47 -47
  177. package/src/module/layout/entity/header-items.entity.ts +28 -28
  178. package/src/module/layout/entity/header-section.entity.ts +19 -19
  179. package/src/module/layout/layout.module.ts +21 -21
  180. package/src/module/layout/repository/header-items.repository.ts +18 -18
  181. package/src/module/layout/repository/header-section.repository.ts +22 -22
  182. package/src/module/layout/service/header-section.service.ts +25 -25
  183. package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -73
  184. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  185. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  186. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  187. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  188. package/src/module/lead/controller/lead.controller.ts +30 -30
  189. package/src/module/lead/lead.module.ts +14 -14
  190. package/src/module/lead/repository/lead.repository.ts +41 -41
  191. package/src/module/lead/service/lead.service.ts +54 -54
  192. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +37 -37
  193. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  194. package/src/module/linked_attributes/linked_attributes.module.ts +16 -16
  195. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  196. package/src/module/linked_attributes/service/linked_attributes.service.ts +75 -75
  197. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  198. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  199. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  200. package/src/module/listmaster/listmaster.module.ts +46 -46
  201. package/src/module/listmaster/repository/list-master-items.repository.ts +173 -173
  202. package/src/module/listmaster/repository/list-master.repository.ts +56 -56
  203. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  204. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  205. package/src/module/listmaster/service/list-master-item.service.ts +281 -281
  206. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  207. package/src/module/listmaster/service/list-master.service.ts +535 -535
  208. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  209. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  210. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  211. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  212. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  213. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  214. package/src/module/mapper/mapper.module.ts +35 -35
  215. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  216. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  217. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  218. package/src/module/mapper/service/field-mapper.service.ts +269 -269
  219. package/src/module/mapper/service/mapper.service.ts +81 -81
  220. package/src/module/master/controller/master.controller.ts +74 -74
  221. package/src/module/master/service/master.service.ts +483 -483
  222. package/src/module/meta/controller/app-master.controller.ts +38 -38
  223. package/src/module/meta/controller/attribute-master.controller.ts +84 -84
  224. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  225. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  226. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  227. package/src/module/meta/controller/entity.controller.ts +308 -342
  228. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  229. package/src/module/meta/controller/media.controller.ts +135 -135
  230. package/src/module/meta/controller/meta.controller.ts +101 -96
  231. package/src/module/meta/controller/view-master.controller.ts +79 -86
  232. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  233. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  234. package/src/module/meta/dto/entity-table.dto.ts +12 -12
  235. package/src/module/meta/entity/app-master.entity.ts +37 -37
  236. package/src/module/meta/entity/attribute-master.entity.ts +92 -92
  237. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  238. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  239. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  240. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  241. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  242. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  243. package/src/module/meta/entity/media-data.entity.ts +32 -32
  244. package/src/module/meta/entity/preference.entity.ts +62 -62
  245. package/src/module/meta/entity/view-master.entity.ts +41 -41
  246. package/src/module/meta/entity.module.ts +165 -168
  247. package/src/module/meta/repository/app-master.repository.ts +20 -20
  248. package/src/module/meta/repository/attribute-master.repository.ts +164 -164
  249. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  250. package/src/module/meta/repository/entity-master.repository.ts +120 -106
  251. package/src/module/meta/repository/entity-relation.repository.ts +22 -22
  252. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  253. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  254. package/src/module/meta/repository/media-data.repository.ts +50 -50
  255. package/src/module/meta/repository/preference.repository.ts +20 -20
  256. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  257. package/src/module/meta/repository/view-master.repository.ts +42 -42
  258. package/src/module/meta/service/app-master.service.ts +37 -37
  259. package/src/module/meta/service/attribute-master.service.ts +131 -131
  260. package/src/module/meta/service/common.service.ts +9 -9
  261. package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
  262. package/src/module/meta/service/entity-dynamic.service.ts +824 -826
  263. package/src/module/meta/service/entity-master.service.ts +171 -171
  264. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  265. package/src/module/meta/service/entity-relation.service.ts +74 -74
  266. package/src/module/meta/service/entity-service-impl.service.ts +388 -439
  267. package/src/module/meta/service/entity-table-column.service.ts +26 -39
  268. package/src/module/meta/service/entity-table.service.ts +157 -157
  269. package/src/module/meta/service/entity-validation.service.ts +188 -187
  270. package/src/module/meta/service/entity.service.ts +49 -59
  271. package/src/module/meta/service/field-group.service.ts +103 -103
  272. package/src/module/meta/service/media-data.service.ts +591 -591
  273. package/src/module/meta/service/populate-meta.service.ts +222 -222
  274. package/src/module/meta/service/preference.service.ts +16 -16
  275. package/src/module/meta/service/resolver.service.ts +289 -291
  276. package/src/module/meta/service/section-master.service.ts +104 -104
  277. package/src/module/meta/service/update-form-json.service.ts +22 -22
  278. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  279. package/src/module/meta/service/view-master.service.ts +127 -127
  280. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  281. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  282. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  283. package/src/module/module/controller/menu.controller.ts +15 -15
  284. package/src/module/module/controller/module-access.controller.ts +133 -133
  285. package/src/module/module/entity/menu.entity.ts +43 -43
  286. package/src/module/module/entity/module-access.entity.ts +25 -25
  287. package/src/module/module/entity/module-action.entity.ts +17 -17
  288. package/src/module/module/entity/module.entity.ts +52 -52
  289. package/src/module/module/module.module.ts +42 -42
  290. package/src/module/module/repository/menu.repository.ts +186 -186
  291. package/src/module/module/repository/module-access.repository.ts +344 -344
  292. package/src/module/module/service/menu.service.ts +82 -82
  293. package/src/module/module/service/module-access.service.ts +189 -189
  294. package/src/module/notification/controller/notification.controller.ts +58 -58
  295. package/src/module/notification/controller/otp.controller.ts +117 -117
  296. package/src/module/notification/entity/notification.entity.ts +26 -26
  297. package/src/module/notification/entity/otp.entity.ts +28 -28
  298. package/src/module/notification/firebase-admin.config.ts +22 -22
  299. package/src/module/notification/notification.module.ts +69 -69
  300. package/src/module/notification/repository/otp.repository.ts +27 -27
  301. package/src/module/notification/service/email.service.ts +127 -127
  302. package/src/module/notification/service/notification.service.ts +164 -164
  303. package/src/module/notification/service/otp.service.ts +133 -133
  304. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  305. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  306. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  307. package/src/module/third-party-module/third-party.module.ts +12 -12
  308. package/src/module/user/controller/login.controller.ts +198 -198
  309. package/src/module/user/controller/user.controller.ts +40 -40
  310. package/src/module/user/dto/create-user.dto.ts +62 -62
  311. package/src/module/user/dto/update-user.dto.ts +4 -4
  312. package/src/module/user/entity/role.entity.ts +33 -33
  313. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  314. package/src/module/user/entity/user-session.entity.ts +73 -73
  315. package/src/module/user/entity/user.entity.ts +59 -59
  316. package/src/module/user/repository/role.repository.ts +96 -96
  317. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  318. package/src/module/user/repository/user.repository.ts +50 -50
  319. package/src/module/user/repository/userSession.repository.ts +33 -33
  320. package/src/module/user/service/login.service.ts +326 -326
  321. package/src/module/user/service/role.service.ts +197 -197
  322. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  323. package/src/module/user/service/user-session.service.ts +200 -200
  324. package/src/module/user/service/user.service.ts +368 -368
  325. package/src/module/user/user.module.ts +65 -65
  326. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  327. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  328. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  329. package/src/module/workflow/controller/action.controller.ts +111 -111
  330. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  331. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  332. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  333. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  334. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  335. package/src/module/workflow/controller/stage.controller.ts +50 -50
  336. package/src/module/workflow/controller/task.controller.ts +77 -77
  337. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  338. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  339. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  340. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  341. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  342. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  343. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  344. package/src/module/workflow/entity/action.entity.ts +53 -53
  345. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  346. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  347. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  348. package/src/module/workflow/entity/form.entity.ts +25 -25
  349. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  350. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  351. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  352. package/src/module/workflow/entity/stage.entity.ts +20 -20
  353. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  354. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  355. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  356. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  357. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  358. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  359. package/src/module/workflow/repository/action-data.repository.ts +346 -346
  360. package/src/module/workflow/repository/action.repository.ts +339 -339
  361. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  362. package/src/module/workflow/repository/comm-template.repository.ts +157 -157
  363. package/src/module/workflow/repository/form-master.repository.ts +50 -50
  364. package/src/module/workflow/repository/stage-group.repository.ts +186 -186
  365. package/src/module/workflow/repository/stage-movement.repository.ts +257 -257
  366. package/src/module/workflow/repository/stage.repository.ts +160 -160
  367. package/src/module/workflow/repository/task.repository.ts +151 -151
  368. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  369. package/src/module/workflow/service/action-category.service.ts +33 -33
  370. package/src/module/workflow/service/action-data.service.ts +62 -62
  371. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  372. package/src/module/workflow/service/action-template-mapping.service.ts +140 -140
  373. package/src/module/workflow/service/action.service.ts +302 -302
  374. package/src/module/workflow/service/activity-log.service.ts +107 -107
  375. package/src/module/workflow/service/comm-template.service.ts +180 -180
  376. package/src/module/workflow/service/entity-modification.service.ts +61 -61
  377. package/src/module/workflow/service/form-master.service.ts +35 -35
  378. package/src/module/workflow/service/populate-workflow.service.ts +320 -320
  379. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  380. package/src/module/workflow/service/stage-group.service.ts +344 -344
  381. package/src/module/workflow/service/stage.service.ts +207 -207
  382. package/src/module/workflow/service/task.service.ts +550 -550
  383. package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
  384. package/src/module/workflow/service/workflow-meta.service.ts +639 -639
  385. package/src/module/workflow/service/workflow.service.ts +213 -213
  386. package/src/module/workflow/workflow.module.ts +180 -180
  387. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  388. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  389. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  390. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +40 -40
  391. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  392. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  393. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  394. package/src/module/workflow-automation/service/schedule-handler.service.ts +168 -168
  395. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  396. package/src/module/workflow-automation/service/workflow-automation.service.ts +519 -515
  397. package/src/module/workflow-automation/workflow-automation.module.ts +54 -54
  398. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  399. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  400. package/src/module/workflow-schedule/README.md +422 -422
  401. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  402. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +255 -255
  403. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  404. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  405. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  406. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  407. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  408. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  409. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  410. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  411. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +53 -53
  412. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  413. package/src/module/workflow-schedule/processors/schedule.processor.ts +620 -620
  414. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +598 -598
  415. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  416. package/src/resources/dev.properties.yaml +31 -31
  417. package/src/resources/local.properties.yaml +27 -27
  418. package/src/resources/properties.module.ts +12 -12
  419. package/src/resources/properties.yaml.ts +11 -11
  420. package/src/resources/uat.properties.yaml +31 -31
  421. package/src/table.config.ts +133 -133
  422. package/src/utils/dto/excel-data.dto.ts +14 -14
  423. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  424. package/src/utils/service/base64util.service.ts +18 -18
  425. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  426. package/src/utils/service/codeGenerator.service.ts +22 -22
  427. package/src/utils/service/dateUtil.service.ts +17 -17
  428. package/src/utils/service/encryptUtil.service.ts +97 -97
  429. package/src/utils/service/excel-helper.service.ts +72 -72
  430. package/src/utils/service/excelUtil.service.ts +15 -15
  431. package/src/utils/service/file-util.service.ts +11 -11
  432. package/src/utils/service/json-util.service.ts +23 -23
  433. package/src/utils/service/loggingUtil.service.ts +88 -88
  434. package/src/utils/service/reflection-helper.service.ts +62 -62
  435. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  436. package/src/utils/utils.module.ts +27 -27
  437. package/tsconfig.build.json +4 -4
  438. package/tsconfig.json +24 -24
  439. package/.claude/settings.local.json +0 -26
  440. package/.idea/copilot.data.migration.agent.xml +0 -6
  441. package/.idea/copilot.data.migration.ask.xml +0 -6
  442. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  443. package/.idea/copilot.data.migration.edit.xml +0 -6
  444. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  445. package/.idea/misc.xml +0 -6
  446. package/.idea/prettier.xml +0 -6
  447. package/dist/module/meta/service/entity-list.service.d.ts +0 -17
  448. package/dist/module/meta/service/entity-list.service.js +0 -142
  449. package/dist/module/meta/service/entity-list.service.js.map +0 -1
  450. package/server.log +0 -850
  451. package/src/module/meta/service/entity-list.service.ts +0 -201
@@ -1,346 +1,346 @@
1
- import { BadRequestException, Injectable } from '@nestjs/common';
2
- import { InjectRepository } from '@nestjs/typeorm';
3
- import { ActionDataEntity } from '../entity/action-data.entity';
4
- import { LessThan, Repository } from 'typeorm';
5
- import { UserData } from 'src/module/user/entity/user.entity';
6
- import { TaskDataEntity } from '../entity/task-data.entity';
7
- import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
8
- import { FORM_STATUS_TO_BE_SENT } from 'src/constant/global.constant';
9
- import { ConfigService } from '@nestjs/config';
10
- import axios from 'axios';
11
- import { WorkflowAutomationEngineService } from 'src/module/workflow-automation/service/workflow-automation-engine.service';
12
-
13
- @Injectable()
14
- export class ActionDataRepository extends EntityServiceImpl {
15
- constructor(
16
- @InjectRepository(ActionDataEntity)
17
- private readonly actionDataRepo: Repository<ActionDataEntity>,
18
- @InjectRepository(TaskDataEntity)
19
- private readonly TaskRepository: Repository<TaskDataEntity>,
20
- private readonly configService: ConfigService,
21
- private readonly workflowAutomationEngineService: WorkflowAutomationEngineService,
22
- ) {
23
- super();
24
- }
25
-
26
- async saveActionData(
27
- action: any,
28
- loggedInUser: UserData,
29
- mapped_entity_id,
30
- mapped_entity_type,
31
- ): Promise<any> {
32
- if (!action?.length) return;
33
-
34
- // Find the action with the lowest sequence
35
- const minSequence = Math.min(...action.map((a) => a.sequence));
36
-
37
- if (action.length > 0) {
38
- for (const act of action) {
39
- const listMasterItemsRepo =
40
- this.reflectionHelper.getRepoService('ListMasterItems');
41
- const is_mandatory = await listMasterItemsRepo.findOne({
42
- where: {
43
- id: act.action_requirement,
44
- organization_id: loggedInUser.organization_id,
45
- },
46
- });
47
-
48
- const isFirst = act.sequence == minSequence;
49
- const actionData = this.actionDataRepo.create({
50
- stage_id: act.stage_id,
51
- user_id: loggedInUser.id,
52
- action_id: act.id,
53
- sequence: act.sequence,
54
- name: act.name,
55
- organization_id: loggedInUser.organization_id,
56
- mapped_entity_id,
57
- mapped_entity_type,
58
- is_current: isFirst ? 'Y' : null,
59
- start_time: isFirst ? new Date() : null,
60
- is_mandatory: is_mandatory?.code === 'mandatory' ? true : false,
61
- category: act?.action_category_code,
62
- } as ActionDataEntity);
63
- await this.actionDataRepo.save(actionData);
64
-
65
- // SEND ANY FORM
66
- // if the action_category_code is 'SDFM', create a entry in crm_lead_form table
67
- if (act?.action_category_code === 'SDFM') {
68
- const dynamicFormURL = await this.generateFormURL(
69
- mapped_entity_type,
70
- mapped_entity_id,
71
- act.form_id,
72
- loggedInUser,
73
- );
74
-
75
- const viewMaster = await super.getEntityData(
76
- 'VMS',
77
- Number(act.form_id),
78
- loggedInUser,
79
- );
80
-
81
- const now = new Date();
82
- const istOffset = 5.5 * 60; // IST is UTC +5:30 in minutes
83
- const istDate = new Date(now.getTime() + istOffset * 60 * 1000);
84
-
85
- const data = {
86
- entity_type: 'LFRM',
87
- name: viewMaster?.name,
88
- stage_id: act.stage_id,
89
- mapped_entity_type,
90
- mapped_entity_id,
91
- view_id: act.form_id,
92
- form_url: dynamicFormURL,
93
- status: FORM_STATUS_TO_BE_SENT,
94
- action_id: act.id,
95
- created_date: istDate,
96
- pdf_template: act.pdf_template,
97
- };
98
-
99
- const createdEntity = await super.createEntity(
100
- data as any,
101
- loggedInUser,
102
- );
103
- // THEN INSERT SDFM IN RELATION TASK TABLE
104
-
105
- const entityRelationRepo =
106
- this.reflectionHelper.getRepoService('EntityRelation');
107
- let relationData = await entityRelationRepo.findOne({
108
- where: {
109
- source_entity_type: createdEntity.mapped_entity_type,
110
- target_entity_type: createdEntity.entity_type,
111
- },
112
- });
113
-
114
- if (relationData) {
115
- const entityRelationDataRepo =
116
- this.reflectionHelper.getRepoService('EntityRelationData');
117
-
118
- await entityRelationDataRepo.save({
119
- organization_id: loggedInUser.organization_id,
120
- source_entity_id: createdEntity.mapped_entity_id,
121
- source_entity_type: createdEntity.mapped_entity_type,
122
- target_entity_id: createdEntity.id,
123
- target_entity_type: createdEntity.entity_type,
124
- relation_type: relationData?.relation_type,
125
- });
126
- }
127
-
128
- await this.workflowAutomationEngineService.handleEntityEvent(
129
- createdEntity.entity_type,
130
- 'CREATE',
131
- createdEntity,
132
- loggedInUser,
133
- null,
134
- );
135
- }
136
- }
137
- }
138
- }
139
-
140
- async updateActionStatus(
141
- loggedInUser: UserData,
142
- mapped_entity_type: string,
143
- mapped_entity_id: number,
144
- stage_id: number,
145
- action_id: number,
146
- ): Promise<any> {
147
- const actionData = await this.actionDataRepo.findOne({
148
- where: {
149
- mapped_entity_type,
150
- mapped_entity_id,
151
- stage_id,
152
- action_id,
153
- },
154
- });
155
-
156
- if (!actionData) return;
157
-
158
- actionData.end_time = new Date();
159
- actionData.modified_by = loggedInUser.id;
160
- actionData.modified_date = new Date();
161
- actionData.is_done = true;
162
- actionData.is_current = 'N'; // Mark as not current
163
-
164
- // Save the updated action
165
- await this.actionDataRepo.update(actionData.id, actionData);
166
-
167
- // NOW, ACTIVATE THE NEXT ACTION (moveNextActionData logic here)
168
- // Find next sequence action for the same entity/stage
169
- const allActionData = await this.actionDataRepo.find({
170
- where: { mapped_entity_type, mapped_entity_id, stage_id },
171
- order: { sequence: 'ASC' },
172
- });
173
-
174
- // Find the action with the next higher sequence number
175
- const nextAction = allActionData.find(
176
- (a) => a.sequence > actionData.sequence,
177
- );
178
- if (nextAction && nextAction.is_current !== 'Y') {
179
- nextAction.is_current = 'Y';
180
- nextAction.start_time = new Date();
181
- nextAction.modified_by = loggedInUser.id;
182
- nextAction.modified_date = new Date();
183
- await this.actionDataRepo.update(nextAction.id, nextAction);
184
- }
185
-
186
- // Optionally return both for audit
187
- return { finished: actionData, activated: nextAction ?? null };
188
- }
189
-
190
- async resubmitAction(
191
- organization_id: number,
192
- mapped_entity_type: string,
193
- mapped_entity_id: number,
194
- stage_id: number,
195
- action_id: number,
196
- ) {
197
- // Get the current active action
198
- const currentAction = await this.actionDataRepo.findOne({
199
- where: {
200
- organization_id,
201
- stage_id,
202
- mapped_entity_id,
203
- mapped_entity_type,
204
- action_id,
205
- is_current: 'Y',
206
- },
207
- });
208
-
209
- if (!currentAction) {
210
- // skip
211
- return;
212
- }
213
-
214
- // Find the immediate previous action in the sequence
215
- const previousAction = await this.actionDataRepo.findOne({
216
- where: {
217
- organization_id,
218
- stage_id,
219
- mapped_entity_id,
220
- mapped_entity_type,
221
- sequence: LessThan(currentAction.sequence),
222
- },
223
- order: { sequence: 'DESC' }, // immediate previous
224
- });
225
-
226
- if (!previousAction) {
227
- // no previous action means we cannot resubmit
228
- return;
229
- }
230
-
231
- // Unset current action
232
- currentAction.is_current = null as any;
233
- currentAction.modified_date = new Date();
234
- currentAction.modified_by = organization_id;
235
- currentAction.start_time = null as any;
236
- currentAction.resubmit_count = (currentAction.resubmit_count ?? 0) + 1;
237
-
238
- await this.actionDataRepo.update(currentAction.id, currentAction);
239
-
240
- // Mark previous action as current again
241
- previousAction.is_current = 'Y';
242
- previousAction.modified_date = new Date();
243
- previousAction.modified_by = organization_id;
244
- previousAction.end_time = null as any; // Reset end time
245
- previousAction.is_done = false;
246
- await this.actionDataRepo.update(previousAction.id, previousAction);
247
-
248
- // reverse the status of tasks for the previous action
249
- const tasksForPrevAction = await this.TaskRepository.find({
250
- where: {
251
- action_id: String(previousAction.action_id),
252
- mapped_entity_type,
253
- mapped_entity_id,
254
- stage_id: String(previousAction.stage_id),
255
- is_done: true,
256
- },
257
- });
258
-
259
- if (tasksForPrevAction.length > 0) {
260
- for (const task of tasksForPrevAction) {
261
- task.modified_date = new Date();
262
- task.is_done = false;
263
-
264
- // Reset status (optional: set to something like 'pending' if needed)
265
- const listMasterItemRepo =
266
- this.reflectionHelper.getRepoService('ListMasterItems');
267
- const listMasterItem = await listMasterItemRepo.findOne({
268
- where: {
269
- code: 'in_progress',
270
- organization_id: organization_id,
271
- listtype: 'TKST',
272
- },
273
- });
274
-
275
- task.status = listMasterItem.id ?? task.status;
276
-
277
- await this.TaskRepository.update(task.id, task);
278
- }
279
- }
280
-
281
- return {
282
- message: 'Action resubmitted successfully',
283
- revertedTo: previousAction,
284
- updated: currentAction,
285
- };
286
- }
287
-
288
- // method to dynamically generate form URL
289
- async generateFormURL(
290
- mapped_entity_type: string,
291
- mapped_entity_id: number,
292
- view_id: number,
293
- loggedInUser: any,
294
- ) {
295
- let organizationData;
296
-
297
- try {
298
- const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
299
-
300
- // Prepare query params
301
- const queryParams = new URLSearchParams({
302
- loggedInUser: JSON.stringify(loggedInUser),
303
- }).toString();
304
-
305
- const { level_id } = loggedInUser;
306
-
307
- const url = `${baseUrl}/organization/public/${level_id}?entity_type=ORGP&${queryParams}`;
308
-
309
- const response = await axios.get(url);
310
-
311
- organizationData = response.data;
312
-
313
- // The API response is likely a JSON object, not an array
314
- } catch (error) {
315
- console.error('Internal Entity API call failed:', error.message);
316
- }
317
-
318
- const org_slug = organizationData?.slug;
319
-
320
- // fetch required var from config or env
321
- const profile = this.configService.get('PROFILE');
322
- const baseUrl = this.configService.get('BASE_URL');
323
- const domainUrl = this.configService.get('DOMAIN_URL');
324
-
325
- if (!profile || !baseUrl || !domainUrl) {
326
- throw new BadRequestException(
327
- `Configuration variable missing for form URL generation`,
328
- );
329
- }
330
-
331
- let finalBaseUrl: string;
332
-
333
- if (profile === 'DEV' || profile === 'STAGING') {
334
- finalBaseUrl = baseUrl;
335
- } else if (profile === 'UAT' || profile === 'PREPROD') {
336
- // fetch org_slug from DB if needed
337
- finalBaseUrl = `https://${org_slug}.${domainUrl}`;
338
- } else {
339
- finalBaseUrl = baseUrl;
340
- }
341
-
342
- const formURL = `${finalBaseUrl}/form/${mapped_entity_type}/${mapped_entity_id}/${view_id}`;
343
-
344
- return formURL;
345
- }
346
- }
1
+ import { BadRequestException, Injectable } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { ActionDataEntity } from '../entity/action-data.entity';
4
+ import { LessThan, Repository } from 'typeorm';
5
+ import { UserData } from 'src/module/user/entity/user.entity';
6
+ import { TaskDataEntity } from '../entity/task-data.entity';
7
+ import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
8
+ import { FORM_STATUS_TO_BE_SENT } from 'src/constant/global.constant';
9
+ import { ConfigService } from '@nestjs/config';
10
+ import axios from 'axios';
11
+ import { WorkflowAutomationEngineService } from 'src/module/workflow-automation/service/workflow-automation-engine.service';
12
+
13
+ @Injectable()
14
+ export class ActionDataRepository extends EntityServiceImpl {
15
+ constructor(
16
+ @InjectRepository(ActionDataEntity)
17
+ private readonly actionDataRepo: Repository<ActionDataEntity>,
18
+ @InjectRepository(TaskDataEntity)
19
+ private readonly TaskRepository: Repository<TaskDataEntity>,
20
+ private readonly configService: ConfigService,
21
+ private readonly workflowAutomationEngineService: WorkflowAutomationEngineService,
22
+ ) {
23
+ super();
24
+ }
25
+
26
+ async saveActionData(
27
+ action: any,
28
+ loggedInUser: UserData,
29
+ mapped_entity_id,
30
+ mapped_entity_type,
31
+ ): Promise<any> {
32
+ if (!action?.length) return;
33
+
34
+ // Find the action with the lowest sequence
35
+ const minSequence = Math.min(...action.map((a) => a.sequence));
36
+
37
+ if (action.length > 0) {
38
+ for (const act of action) {
39
+ const listMasterItemsRepo =
40
+ this.reflectionHelper.getRepoService('ListMasterItems');
41
+ const is_mandatory = await listMasterItemsRepo.findOne({
42
+ where: {
43
+ id: act.action_requirement,
44
+ organization_id: loggedInUser.organization_id,
45
+ },
46
+ });
47
+
48
+ const isFirst = act.sequence == minSequence;
49
+ const actionData = this.actionDataRepo.create({
50
+ stage_id: act.stage_id,
51
+ user_id: loggedInUser.id,
52
+ action_id: act.id,
53
+ sequence: act.sequence,
54
+ name: act.name,
55
+ organization_id: loggedInUser.organization_id,
56
+ mapped_entity_id,
57
+ mapped_entity_type,
58
+ is_current: isFirst ? 'Y' : null,
59
+ start_time: isFirst ? new Date() : null,
60
+ is_mandatory: is_mandatory?.code === 'mandatory' ? true : false,
61
+ category: act?.action_category_code,
62
+ } as ActionDataEntity);
63
+ await this.actionDataRepo.save(actionData);
64
+
65
+ // SEND ANY FORM
66
+ // if the action_category_code is 'SDFM', create a entry in crm_lead_form table
67
+ if (act?.action_category_code === 'SDFM') {
68
+ const dynamicFormURL = await this.generateFormURL(
69
+ mapped_entity_type,
70
+ mapped_entity_id,
71
+ act.form_id,
72
+ loggedInUser,
73
+ );
74
+
75
+ const viewMaster = await super.getEntityData(
76
+ 'VMS',
77
+ Number(act.form_id),
78
+ loggedInUser,
79
+ );
80
+
81
+ const now = new Date();
82
+ const istOffset = 5.5 * 60; // IST is UTC +5:30 in minutes
83
+ const istDate = new Date(now.getTime() + istOffset * 60 * 1000);
84
+
85
+ const data = {
86
+ entity_type: 'LFRM',
87
+ name: viewMaster?.name,
88
+ stage_id: act.stage_id,
89
+ mapped_entity_type,
90
+ mapped_entity_id,
91
+ view_id: act.form_id,
92
+ form_url: dynamicFormURL,
93
+ status: FORM_STATUS_TO_BE_SENT,
94
+ action_id: act.id,
95
+ created_date: istDate,
96
+ pdf_template: act.pdf_template,
97
+ };
98
+
99
+ const createdEntity = await super.createEntity(
100
+ data as any,
101
+ loggedInUser,
102
+ );
103
+ // THEN INSERT SDFM IN RELATION TASK TABLE
104
+
105
+ const entityRelationRepo =
106
+ this.reflectionHelper.getRepoService('EntityRelation');
107
+ let relationData = await entityRelationRepo.findOne({
108
+ where: {
109
+ source_entity_type: createdEntity.mapped_entity_type,
110
+ target_entity_type: createdEntity.entity_type,
111
+ },
112
+ });
113
+
114
+ if (relationData) {
115
+ const entityRelationDataRepo =
116
+ this.reflectionHelper.getRepoService('EntityRelationData');
117
+
118
+ await entityRelationDataRepo.save({
119
+ organization_id: loggedInUser.organization_id,
120
+ source_entity_id: createdEntity.mapped_entity_id,
121
+ source_entity_type: createdEntity.mapped_entity_type,
122
+ target_entity_id: createdEntity.id,
123
+ target_entity_type: createdEntity.entity_type,
124
+ relation_type: relationData?.relation_type,
125
+ });
126
+ }
127
+
128
+ await this.workflowAutomationEngineService.handleEntityEvent(
129
+ createdEntity.entity_type,
130
+ 'CREATE',
131
+ createdEntity,
132
+ loggedInUser,
133
+ null,
134
+ );
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ async updateActionStatus(
141
+ loggedInUser: UserData,
142
+ mapped_entity_type: string,
143
+ mapped_entity_id: number,
144
+ stage_id: number,
145
+ action_id: number,
146
+ ): Promise<any> {
147
+ const actionData = await this.actionDataRepo.findOne({
148
+ where: {
149
+ mapped_entity_type,
150
+ mapped_entity_id,
151
+ stage_id,
152
+ action_id,
153
+ },
154
+ });
155
+
156
+ if (!actionData) return;
157
+
158
+ actionData.end_time = new Date();
159
+ actionData.modified_by = loggedInUser.id;
160
+ actionData.modified_date = new Date();
161
+ actionData.is_done = true;
162
+ actionData.is_current = 'N'; // Mark as not current
163
+
164
+ // Save the updated action
165
+ await this.actionDataRepo.update(actionData.id, actionData);
166
+
167
+ // NOW, ACTIVATE THE NEXT ACTION (moveNextActionData logic here)
168
+ // Find next sequence action for the same entity/stage
169
+ const allActionData = await this.actionDataRepo.find({
170
+ where: { mapped_entity_type, mapped_entity_id, stage_id },
171
+ order: { sequence: 'ASC' },
172
+ });
173
+
174
+ // Find the action with the next higher sequence number
175
+ const nextAction = allActionData.find(
176
+ (a) => a.sequence > actionData.sequence,
177
+ );
178
+ if (nextAction && nextAction.is_current !== 'Y') {
179
+ nextAction.is_current = 'Y';
180
+ nextAction.start_time = new Date();
181
+ nextAction.modified_by = loggedInUser.id;
182
+ nextAction.modified_date = new Date();
183
+ await this.actionDataRepo.update(nextAction.id, nextAction);
184
+ }
185
+
186
+ // Optionally return both for audit
187
+ return { finished: actionData, activated: nextAction ?? null };
188
+ }
189
+
190
+ async resubmitAction(
191
+ organization_id: number,
192
+ mapped_entity_type: string,
193
+ mapped_entity_id: number,
194
+ stage_id: number,
195
+ action_id: number,
196
+ ) {
197
+ // Get the current active action
198
+ const currentAction = await this.actionDataRepo.findOne({
199
+ where: {
200
+ organization_id,
201
+ stage_id,
202
+ mapped_entity_id,
203
+ mapped_entity_type,
204
+ action_id,
205
+ is_current: 'Y',
206
+ },
207
+ });
208
+
209
+ if (!currentAction) {
210
+ // skip
211
+ return;
212
+ }
213
+
214
+ // Find the immediate previous action in the sequence
215
+ const previousAction = await this.actionDataRepo.findOne({
216
+ where: {
217
+ organization_id,
218
+ stage_id,
219
+ mapped_entity_id,
220
+ mapped_entity_type,
221
+ sequence: LessThan(currentAction.sequence),
222
+ },
223
+ order: { sequence: 'DESC' }, // immediate previous
224
+ });
225
+
226
+ if (!previousAction) {
227
+ // no previous action means we cannot resubmit
228
+ return;
229
+ }
230
+
231
+ // Unset current action
232
+ currentAction.is_current = null as any;
233
+ currentAction.modified_date = new Date();
234
+ currentAction.modified_by = organization_id;
235
+ currentAction.start_time = null as any;
236
+ currentAction.resubmit_count = (currentAction.resubmit_count ?? 0) + 1;
237
+
238
+ await this.actionDataRepo.update(currentAction.id, currentAction);
239
+
240
+ // Mark previous action as current again
241
+ previousAction.is_current = 'Y';
242
+ previousAction.modified_date = new Date();
243
+ previousAction.modified_by = organization_id;
244
+ previousAction.end_time = null as any; // Reset end time
245
+ previousAction.is_done = false;
246
+ await this.actionDataRepo.update(previousAction.id, previousAction);
247
+
248
+ // reverse the status of tasks for the previous action
249
+ const tasksForPrevAction = await this.TaskRepository.find({
250
+ where: {
251
+ action_id: String(previousAction.action_id),
252
+ mapped_entity_type,
253
+ mapped_entity_id,
254
+ stage_id: String(previousAction.stage_id),
255
+ is_done: true,
256
+ },
257
+ });
258
+
259
+ if (tasksForPrevAction.length > 0) {
260
+ for (const task of tasksForPrevAction) {
261
+ task.modified_date = new Date();
262
+ task.is_done = false;
263
+
264
+ // Reset status (optional: set to something like 'pending' if needed)
265
+ const listMasterItemRepo =
266
+ this.reflectionHelper.getRepoService('ListMasterItems');
267
+ const listMasterItem = await listMasterItemRepo.findOne({
268
+ where: {
269
+ code: 'in_progress',
270
+ organization_id: organization_id,
271
+ listtype: 'TKST',
272
+ },
273
+ });
274
+
275
+ task.status = listMasterItem.id ?? task.status;
276
+
277
+ await this.TaskRepository.update(task.id, task);
278
+ }
279
+ }
280
+
281
+ return {
282
+ message: 'Action resubmitted successfully',
283
+ revertedTo: previousAction,
284
+ updated: currentAction,
285
+ };
286
+ }
287
+
288
+ // method to dynamically generate form URL
289
+ async generateFormURL(
290
+ mapped_entity_type: string,
291
+ mapped_entity_id: number,
292
+ view_id: number,
293
+ loggedInUser: any,
294
+ ) {
295
+ let organizationData;
296
+
297
+ try {
298
+ const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
299
+
300
+ // Prepare query params
301
+ const queryParams = new URLSearchParams({
302
+ loggedInUser: JSON.stringify(loggedInUser),
303
+ }).toString();
304
+
305
+ const { level_id } = loggedInUser;
306
+
307
+ const url = `${baseUrl}/organization/public/${level_id}?entity_type=ORGP&${queryParams}`;
308
+
309
+ const response = await axios.get(url);
310
+
311
+ organizationData = response.data;
312
+
313
+ // The API response is likely a JSON object, not an array
314
+ } catch (error) {
315
+ console.error('Internal Entity API call failed:', error.message);
316
+ }
317
+
318
+ const org_slug = organizationData?.slug;
319
+
320
+ // fetch required var from config or env
321
+ const profile = this.configService.get('PROFILE');
322
+ const baseUrl = this.configService.get('BASE_URL');
323
+ const domainUrl = this.configService.get('DOMAIN_URL');
324
+
325
+ if (!profile || !baseUrl || !domainUrl) {
326
+ throw new BadRequestException(
327
+ `Configuration variable missing for form URL generation`,
328
+ );
329
+ }
330
+
331
+ let finalBaseUrl: string;
332
+
333
+ if (profile === 'DEV' || profile === 'STAGING') {
334
+ finalBaseUrl = baseUrl;
335
+ } else if (profile === 'UAT' || profile === 'PREPROD') {
336
+ // fetch org_slug from DB if needed
337
+ finalBaseUrl = `https://${org_slug}.${domainUrl}`;
338
+ } else {
339
+ finalBaseUrl = baseUrl;
340
+ }
341
+
342
+ const formURL = `${finalBaseUrl}/form/${mapped_entity_type}/${mapped_entity_id}/${view_id}`;
343
+
344
+ return formURL;
345
+ }
346
+ }