rez_core 5.0.181 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +26 -0
- package/.idea/250218_nodejs_core.iml +8 -11
- package/.idea/codeStyles/Project.xml +58 -58
- package/.idea/codeStyles/codeStyleConfig.xml +4 -4
- package/.idea/copilot.data.migration.agent.xml +6 -0
- package/.idea/copilot.data.migration.ask.xml +6 -0
- package/.idea/copilot.data.migration.ask2agent.xml +6 -0
- package/.idea/copilot.data.migration.edit.xml +6 -0
- package/.idea/inspectionProfiles/Project_Default.xml +1 -1
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +7 -7
- package/.idea/prettier.xml +5 -5
- package/.idea/vcs.xml +5 -5
- package/.prettierrc +3 -3
- package/README.md +99 -99
- package/dist/module/auth/guards/role.guard.js +3 -3
- package/dist/module/enterprise/controller/enterprise.controller.d.ts +12 -0
- package/dist/module/enterprise/controller/enterprise.controller.js +57 -0
- package/dist/module/enterprise/controller/enterprise.controller.js.map +1 -0
- package/dist/module/enterprise/controller/organization.controller.d.ts +11 -1
- package/dist/module/enterprise/controller/organization.controller.js +62 -2
- package/dist/module/enterprise/controller/organization.controller.js.map +1 -1
- package/dist/module/enterprise/enterprise.module.js +2 -1
- package/dist/module/enterprise/enterprise.module.js.map +1 -1
- package/dist/module/enterprise/entity/enterprise.entity.d.ts +1 -3
- package/dist/module/enterprise/entity/enterprise.entity.js +4 -12
- package/dist/module/enterprise/entity/enterprise.entity.js.map +1 -1
- package/dist/module/enterprise/entity/organization.entity.d.ts +1 -17
- package/dist/module/enterprise/entity/organization.entity.js +4 -72
- package/dist/module/enterprise/entity/organization.entity.js.map +1 -1
- package/dist/module/enterprise/repository/enterprise.repository.d.ts +2 -2
- package/dist/module/enterprise/repository/enterprise.repository.js +9 -4
- package/dist/module/enterprise/repository/enterprise.repository.js.map +1 -1
- package/dist/module/enterprise/service/enterprise.service.d.ts +2 -2
- package/dist/module/enterprise/service/enterprise.service.js +4 -4
- package/dist/module/enterprise/service/enterprise.service.js.map +1 -1
- package/dist/module/enterprise/service/organization.service.d.ts +2 -2
- package/dist/module/enterprise/service/organization.service.js +97 -20
- package/dist/module/enterprise/service/organization.service.js.map +1 -1
- package/dist/module/filter/entity/saved-filter-master.entity.d.ts +1 -0
- package/dist/module/filter/entity/saved-filter-master.entity.js +4 -0
- package/dist/module/filter/entity/saved-filter-master.entity.js.map +1 -1
- package/dist/module/filter/repository/saved-filter.repository.js +2 -0
- package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
- package/dist/module/filter/service/filter.service.js +19 -19
- package/dist/module/integration/examples/usage.example.js +9 -9
- package/dist/module/meta/repository/attribute-master.repository.js +8 -8
- package/dist/module/meta/service/entity-dynamic.service.js +16 -16
- package/dist/module/meta/service/media-data.service.js +6 -6
- package/dist/module/meta/service/resolver.service.js +11 -11
- package/dist/module/module/repository/menu.repository.js +4 -4
- package/dist/module/notification/service/notification.service.js +6 -6
- package/dist/module/user/controller/login.controller.js +18 -18
- package/dist/module/workflow/repository/action.repository.js +2 -2
- package/dist/module/workflow/repository/stage.repository.js +8 -8
- package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
- package/dist/module/workflow/service/action.service.js +5 -5
- package/dist/module/workflow/service/entity-modification.service.js +2 -2
- package/dist/module/workflow/service/task.service.js +8 -8
- package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
- package/dist/table.config.d.ts +1 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/service/reflection-helper.service.js +2 -2
- package/docs/modules/event-driven-integration-design.md +91 -91
- package/docs/modules/integration.md +250 -250
- package/eslint.config.mjs +34 -34
- package/nest-cli.json +14 -14
- package/package.json +125 -125
- package/server.log +850 -0
- package/src/app.controller.ts +12 -12
- package/src/app.module.ts +68 -68
- package/src/app.service.ts +8 -8
- package/src/config/bull.config.ts +69 -69
- package/src/config/config.module.ts +17 -17
- package/src/config/database.config.ts +48 -48
- package/src/constant/global.constant.ts +67 -67
- package/src/core.module.ts +94 -94
- package/src/decorators/roles.decorator.ts +7 -7
- package/src/dtos/response.dto.ts +6 -6
- package/src/dtos/response.ts +5 -5
- package/src/index.ts +1 -1
- package/src/module/auth/auth.module.ts +49 -49
- package/src/module/auth/controller/auth.controller.ts +28 -28
- package/src/module/auth/guards/google-auth.guard.ts +9 -9
- package/src/module/auth/guards/jwt.guard.ts +22 -22
- package/src/module/auth/guards/role.guard.ts +68 -68
- package/src/module/auth/services/auth.service.ts +56 -56
- package/src/module/auth/services/jwt.service.ts +11 -11
- package/src/module/auth/strategies/google.strategy.ts +54 -54
- package/src/module/auth/strategies/jwt.strategy.ts +58 -58
- package/src/module/auth/strategies/local.strategy.ts +13 -13
- package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
- package/src/module/dashboard/dashboard.module.ts +21 -21
- package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
- package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
- package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
- package/src/module/dashboard/service/dashboard.service.ts +72 -72
- package/src/module/enterprise/controller/enterprise.controller.ts +40 -0
- package/src/module/enterprise/controller/organization.controller.ts +93 -36
- package/src/module/enterprise/enterprise.module.ts +46 -45
- package/src/module/enterprise/entity/enterprise.entity.ts +31 -37
- package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
- package/src/module/enterprise/entity/organization.entity.ts +40 -92
- package/src/module/enterprise/repository/enterprise.repository.ts +39 -31
- package/src/module/enterprise/repository/organization.repository.ts +26 -26
- package/src/module/enterprise/repository/school.repository.ts +272 -272
- package/src/module/enterprise/service/brand.service.ts +5 -5
- package/src/module/enterprise/service/enterprise.service.ts +22 -16
- package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
- package/src/module/enterprise/service/organization.service.ts +262 -145
- package/src/module/entity_json/controller/entity_json.controller.ts +47 -47
- package/src/module/entity_json/entity/entityJson.entity.ts +39 -39
- package/src/module/entity_json/entity_json.module.ts +18 -18
- package/src/module/entity_json/service/entityJson.repository.ts +37 -37
- package/src/module/entity_json/service/entity_json.service.ts +241 -241
- package/src/module/export/controller/export.controller.ts +83 -83
- package/src/module/export/export.module.ts +14 -14
- package/src/module/export/service/export.service.ts +105 -105
- package/src/module/filter/controller/filter.controller.ts +87 -87
- package/src/module/filter/dto/filter-request.dto.ts +39 -39
- package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
- package/src/module/filter/entity/saved-filter-master.entity.ts +35 -32
- package/src/module/filter/filter.module.ts +33 -33
- package/src/module/filter/repository/saved-filter.repository.ts +247 -258
- package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
- package/src/module/filter/service/filter-evaluator.service.ts +82 -82
- package/src/module/filter/service/filter.service.ts +1316 -1316
- package/src/module/filter/service/saved-filter.service.ts +164 -164
- package/src/module/ics/controller/ics.controller.ts +21 -21
- package/src/module/ics/dto/ics.dto.ts +55 -55
- package/src/module/ics/ics.module.ts +13 -13
- package/src/module/ics/service/ics.service.ts +57 -57
- package/src/module/integration/controller/calender-event.controller.ts +31 -31
- package/src/module/integration/controller/integration.controller.ts +662 -662
- package/src/module/integration/controller/wrapper.controller.ts +37 -37
- package/src/module/integration/dto/create-config.dto.ts +526 -526
- package/src/module/integration/entity/integration-config.entity.ts +112 -112
- package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
- package/src/module/integration/entity/integration-source.entity.ts +17 -17
- package/src/module/integration/entity/user-integration.entity.ts +71 -71
- package/src/module/integration/examples/usage.example.ts +338 -338
- package/src/module/integration/factories/base.factory.ts +7 -7
- package/src/module/integration/factories/email.factory.ts +49 -49
- package/src/module/integration/factories/integration.factory.ts +121 -121
- package/src/module/integration/factories/sms.factory.ts +51 -51
- package/src/module/integration/factories/telephone.factory.ts +41 -41
- package/src/module/integration/factories/whatsapp.factory.ts +56 -56
- package/src/module/integration/integration.module.ts +110 -110
- package/src/module/integration/service/calendar-event.service.ts +118 -118
- package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
- package/src/module/integration/service/integration-queue.service.ts +229 -229
- package/src/module/integration/service/integration.service.ts +2634 -2634
- package/src/module/integration/service/oauth.service.ts +224 -224
- package/src/module/integration/service/wrapper.service.ts +753 -753
- package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
- package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
- package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
- package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
- package/src/module/integration/strategies/integration.strategy.ts +97 -97
- package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
- package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
- package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
- package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
- package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
- package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
- package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
- package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
- package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
- package/src/module/layout/controller/layout.controller.ts +47 -47
- package/src/module/layout/entity/header-items.entity.ts +28 -28
- package/src/module/layout/entity/header-section.entity.ts +19 -19
- package/src/module/layout/layout.module.ts +21 -21
- package/src/module/layout/repository/header-items.repository.ts +18 -18
- package/src/module/layout/repository/header-section.repository.ts +22 -22
- package/src/module/layout/service/header-section.service.ts +25 -25
- package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
- package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
- package/src/module/layout_preference/layout_preference.module.ts +22 -22
- package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
- package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
- package/src/module/lead/controller/lead.controller.ts +30 -30
- package/src/module/lead/lead.module.ts +14 -14
- package/src/module/lead/repository/lead.repository.ts +41 -41
- package/src/module/lead/service/lead.service.ts +54 -54
- package/src/module/linked_attributes/controller/linked_attributes.controller.ts +37 -37
- package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
- package/src/module/linked_attributes/linked_attributes.module.ts +16 -16
- package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
- package/src/module/linked_attributes/service/linked_attributes.service.ts +73 -73
- package/src/module/listmaster/controller/list-master.controller.ts +230 -230
- package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
- package/src/module/listmaster/entity/list-master.entity.ts +33 -33
- package/src/module/listmaster/listmaster.module.ts +46 -46
- package/src/module/listmaster/repository/list-master-items.repository.ts +173 -173
- package/src/module/listmaster/repository/list-master.repository.ts +56 -56
- package/src/module/listmaster/service/list-master-engine.ts +19 -19
- package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
- package/src/module/listmaster/service/list-master-item.service.ts +280 -280
- package/src/module/listmaster/service/list-master-registry.ts +15 -15
- package/src/module/listmaster/service/list-master.service.ts +527 -527
- package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
- package/src/module/mapper/controller/mapper.controller.ts +20 -20
- package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
- package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
- package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
- package/src/module/mapper/entity/mapper.entity.ts +16 -16
- package/src/module/mapper/mapper.module.ts +35 -35
- package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
- package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
- package/src/module/mapper/repository/mapper.repository.ts +32 -32
- package/src/module/mapper/service/field-mapper.service.ts +269 -269
- package/src/module/mapper/service/mapper.service.ts +80 -80
- package/src/module/master/controller/master.controller.ts +74 -74
- package/src/module/master/service/master.service.ts +484 -484
- package/src/module/meta/controller/app-master.controller.ts +38 -38
- package/src/module/meta/controller/attribute-master.controller.ts +84 -84
- package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
- package/src/module/meta/controller/entity-master.controller.ts +41 -41
- package/src/module/meta/controller/entity-relation.controller.ts +36 -36
- package/src/module/meta/controller/entity.controller.ts +308 -308
- package/src/module/meta/controller/entity.public.controller.ts +75 -75
- package/src/module/meta/controller/media.controller.ts +135 -135
- package/src/module/meta/controller/meta.controller.ts +101 -101
- package/src/module/meta/controller/view-master.controller.ts +79 -79
- package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
- package/src/module/meta/dto/entity-tab.dto.ts +4 -4
- package/src/module/meta/dto/entity-table.dto.ts +12 -12
- package/src/module/meta/entity/app-master.entity.ts +37 -37
- package/src/module/meta/entity/attribute-master.entity.ts +92 -92
- package/src/module/meta/entity/base-entity.entity.ts +75 -75
- package/src/module/meta/entity/entity-master.entity.ts +85 -85
- package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
- package/src/module/meta/entity/entity-relation.entity.ts +23 -23
- package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
- package/src/module/meta/entity/entity-table.entity.ts +50 -50
- package/src/module/meta/entity/media-data.entity.ts +32 -32
- package/src/module/meta/entity/preference.entity.ts +62 -62
- package/src/module/meta/entity/view-master.entity.ts +41 -41
- package/src/module/meta/entity.module.ts +165 -165
- package/src/module/meta/repository/app-master.repository.ts +20 -20
- package/src/module/meta/repository/attribute-master.repository.ts +164 -164
- package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
- package/src/module/meta/repository/entity-master.repository.ts +120 -120
- package/src/module/meta/repository/entity-relation.repository.ts +22 -22
- package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
- package/src/module/meta/repository/entity-table.repository.ts +53 -53
- package/src/module/meta/repository/media-data.repository.ts +50 -50
- package/src/module/meta/repository/preference.repository.ts +20 -20
- package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
- package/src/module/meta/repository/view-master.repository.ts +42 -42
- package/src/module/meta/service/app-master.service.ts +37 -37
- package/src/module/meta/service/attribute-master.service.ts +132 -132
- package/src/module/meta/service/common.service.ts +9 -9
- package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
- package/src/module/meta/service/entity-dynamic.service.ts +824 -824
- package/src/module/meta/service/entity-master.service.ts +171 -171
- package/src/module/meta/service/entity-realation-data.service.ts +9 -9
- package/src/module/meta/service/entity-relation.service.ts +74 -74
- package/src/module/meta/service/entity-service-impl.service.ts +388 -388
- package/src/module/meta/service/entity-table-column.service.ts +26 -26
- package/src/module/meta/service/entity-table.service.ts +157 -157
- package/src/module/meta/service/entity-validation.service.ts +188 -188
- package/src/module/meta/service/entity.service.ts +49 -49
- package/src/module/meta/service/field-group.service.ts +103 -103
- package/src/module/meta/service/media-data.service.ts +591 -591
- package/src/module/meta/service/populate-meta.service.ts +222 -222
- package/src/module/meta/service/preference.service.ts +16 -16
- package/src/module/meta/service/resolver.service.ts +280 -280
- package/src/module/meta/service/section-master.service.ts +104 -104
- package/src/module/meta/service/update-form-json.service.ts +22 -22
- package/src/module/meta/service/user-app-mapping.service.ts +17 -17
- package/src/module/meta/service/view-master.service.ts +127 -127
- package/src/module/microservice-client/microservice-clients.module.ts +13 -13
- package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
- package/src/module/microservice-client/service/microservice-clients.ts +4 -4
- package/src/module/module/controller/menu.controller.ts +15 -15
- package/src/module/module/controller/module-access.controller.ts +133 -133
- package/src/module/module/entity/menu.entity.ts +43 -43
- package/src/module/module/entity/module-access.entity.ts +25 -25
- package/src/module/module/entity/module-action.entity.ts +17 -17
- package/src/module/module/entity/module.entity.ts +52 -52
- package/src/module/module/module.module.ts +42 -42
- package/src/module/module/repository/menu.repository.ts +186 -186
- package/src/module/module/repository/module-access.repository.ts +344 -344
- package/src/module/module/service/menu.service.ts +82 -82
- package/src/module/module/service/module-access.service.ts +189 -189
- package/src/module/notification/controller/notification.controller.ts +58 -58
- package/src/module/notification/controller/otp.controller.ts +117 -117
- package/src/module/notification/entity/notification.entity.ts +26 -26
- package/src/module/notification/entity/otp.entity.ts +28 -28
- package/src/module/notification/firebase-admin.config.ts +22 -22
- package/src/module/notification/notification.module.ts +69 -69
- package/src/module/notification/repository/otp.repository.ts +27 -27
- package/src/module/notification/service/email.service.ts +127 -127
- package/src/module/notification/service/notification.service.ts +164 -164
- package/src/module/notification/service/otp.service.ts +133 -133
- package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
- package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
- package/src/module/third-party-module/service/api-registry.service.ts +13 -13
- package/src/module/third-party-module/third-party.module.ts +12 -12
- package/src/module/user/controller/login.controller.ts +198 -198
- package/src/module/user/controller/user.controller.ts +40 -40
- package/src/module/user/dto/create-user.dto.ts +62 -62
- package/src/module/user/dto/update-user.dto.ts +4 -4
- package/src/module/user/entity/role.entity.ts +33 -33
- package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
- package/src/module/user/entity/user-session.entity.ts +73 -73
- package/src/module/user/entity/user.entity.ts +62 -62
- package/src/module/user/repository/role.repository.ts +96 -96
- package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
- package/src/module/user/repository/user.repository.ts +50 -50
- package/src/module/user/repository/userSession.repository.ts +33 -33
- package/src/module/user/service/login.service.ts +326 -326
- package/src/module/user/service/role.service.ts +197 -197
- package/src/module/user/service/user-role-mapping.service.ts +98 -98
- package/src/module/user/service/user-session.service.ts +200 -200
- package/src/module/user/service/user.service.ts +368 -368
- package/src/module/user/user.module.ts +65 -65
- package/src/module/workflow/controller/action-category.controller.ts +54 -54
- package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
- package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
- package/src/module/workflow/controller/action.controller.ts +111 -111
- package/src/module/workflow/controller/activity-log.controller.ts +55 -55
- package/src/module/workflow/controller/comm-template.controller.ts +43 -43
- package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
- package/src/module/workflow/controller/form-master.controller.ts +43 -43
- package/src/module/workflow/controller/stage-group.controller.ts +49 -49
- package/src/module/workflow/controller/stage.controller.ts +51 -51
- package/src/module/workflow/controller/task.controller.ts +77 -77
- package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
- package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
- package/src/module/workflow/controller/workflow.controller.ts +67 -67
- package/src/module/workflow/entity/action-category.entity.ts +38 -38
- package/src/module/workflow/entity/action-data.entity.ts +55 -55
- package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
- package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
- package/src/module/workflow/entity/action.entity.ts +53 -53
- package/src/module/workflow/entity/activity-log.entity.ts +43 -43
- package/src/module/workflow/entity/comm-template.entity.ts +43 -43
- package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
- package/src/module/workflow/entity/form.entity.ts +25 -25
- package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
- package/src/module/workflow/entity/stage-group.entity.ts +23 -23
- package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
- package/src/module/workflow/entity/stage.entity.ts +20 -20
- package/src/module/workflow/entity/task-data.entity.ts +88 -88
- package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
- package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
- package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
- package/src/module/workflow/entity/workflow.entity.ts +20 -20
- package/src/module/workflow/repository/action-category.repository.ts +79 -79
- package/src/module/workflow/repository/action-data.repository.ts +347 -347
- package/src/module/workflow/repository/action.repository.ts +339 -339
- package/src/module/workflow/repository/activity-log.repository.ts +148 -148
- package/src/module/workflow/repository/comm-template.repository.ts +157 -157
- package/src/module/workflow/repository/form-master.repository.ts +50 -50
- package/src/module/workflow/repository/stage-group.repository.ts +186 -186
- package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
- package/src/module/workflow/repository/stage.repository.ts +160 -160
- package/src/module/workflow/repository/task.repository.ts +154 -154
- package/src/module/workflow/repository/workflow.repository.ts +42 -42
- package/src/module/workflow/service/action-category.service.ts +33 -33
- package/src/module/workflow/service/action-data.service.ts +62 -62
- package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
- package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
- package/src/module/workflow/service/action.service.ts +302 -302
- package/src/module/workflow/service/activity-log.service.ts +107 -107
- package/src/module/workflow/service/comm-template.service.ts +181 -181
- package/src/module/workflow/service/entity-modification.service.ts +61 -61
- package/src/module/workflow/service/form-master.service.ts +35 -35
- package/src/module/workflow/service/populate-workflow.service.ts +320 -320
- package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
- package/src/module/workflow/service/stage-group.service.ts +325 -325
- package/src/module/workflow/service/stage.service.ts +197 -197
- package/src/module/workflow/service/task.service.ts +551 -551
- package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
- package/src/module/workflow/service/workflow-meta.service.ts +640 -640
- package/src/module/workflow/service/workflow.service.ts +213 -213
- package/src/module/workflow/workflow.module.ts +180 -180
- package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
- package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
- package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
- package/src/module/workflow-automation/entity/workflow-automation.entity.ts +40 -40
- package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
- package/src/module/workflow-automation/interface/action.interface.ts +5 -5
- package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
- package/src/module/workflow-automation/service/schedule-handler.service.ts +168 -168
- package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
- package/src/module/workflow-automation/service/workflow-automation.service.ts +476 -476
- package/src/module/workflow-automation/workflow-automation.module.ts +54 -54
- package/src/module/workflow-schedule/INSTALLATION.md +244 -244
- package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
- package/src/module/workflow-schedule/README.md +422 -422
- package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
- package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
- package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
- package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
- package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
- package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
- package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
- package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
- package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
- package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
- package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +53 -53
- package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
- package/src/module/workflow-schedule/processors/schedule.processor.ts +620 -620
- package/src/module/workflow-schedule/service/workflow-schedule.service.ts +597 -597
- package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
- package/src/resources/dev.properties.yaml +31 -31
- package/src/resources/local.properties.yaml +27 -27
- package/src/resources/properties.module.ts +12 -12
- package/src/resources/properties.yaml.ts +11 -11
- package/src/resources/uat.properties.yaml +31 -31
- package/src/table.config.ts +133 -133
- package/src/utils/dto/excel-data.dto.ts +14 -14
- package/src/utils/dto/excelsheet-data.dto.ts +5 -5
- package/src/utils/service/base64util.service.ts +18 -18
- package/src/utils/service/clockIDGenUtil.service.ts +21 -21
- package/src/utils/service/codeGenerator.service.ts +22 -22
- package/src/utils/service/dateUtil.service.ts +17 -17
- package/src/utils/service/encryptUtil.service.ts +97 -97
- package/src/utils/service/excel-helper.service.ts +72 -72
- package/src/utils/service/excelUtil.service.ts +15 -15
- package/src/utils/service/file-util.service.ts +11 -11
- package/src/utils/service/json-util.service.ts +23 -23
- package/src/utils/service/loggingUtil.service.ts +88 -88
- package/src/utils/service/reflection-helper.service.ts +62 -62
- package/src/utils/service/wbsCodeGen.service.ts +8 -8
- package/src/utils/utils.module.ts +27 -27
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +24 -24
|
@@ -1,339 +1,339 @@
|
|
|
1
|
-
import { BadRequestException, Injectable } from '@nestjs/common';
|
|
2
|
-
import { In } from 'typeorm';
|
|
3
|
-
import { UserData } from 'src/module/user/entity/user.entity';
|
|
4
|
-
import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
|
|
5
|
-
|
|
6
|
-
@Injectable()
|
|
7
|
-
export class ActionRepository {
|
|
8
|
-
constructor(private readonly reflectionHelper: ReflectionHelper) {}
|
|
9
|
-
|
|
10
|
-
async getReasonCode(loggedInUser: UserData): Promise<any> {
|
|
11
|
-
const { organization_id } = loggedInUser;
|
|
12
|
-
const listMasterRepo =
|
|
13
|
-
this.reflectionHelper.getRepoService('ListMasterData');
|
|
14
|
-
const result = await listMasterRepo.find({
|
|
15
|
-
where: {
|
|
16
|
-
organization_id,
|
|
17
|
-
source: 'master',
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const formatted = result.map((item: any) => ({
|
|
22
|
-
label: item.name,
|
|
23
|
-
value: item.type,
|
|
24
|
-
}));
|
|
25
|
-
|
|
26
|
-
return formatted;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async defaultReasonCode(list_type: string, loggedInUser: UserData) {
|
|
30
|
-
const { organization_id } = loggedInUser;
|
|
31
|
-
if (!list_type) {
|
|
32
|
-
throw new BadRequestException('list_type is required');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const listMasterItemsRepo =
|
|
36
|
-
this.reflectionHelper.getRepoService('ListMasterItems');
|
|
37
|
-
|
|
38
|
-
const result = await listMasterItemsRepo.find({
|
|
39
|
-
where: {
|
|
40
|
-
listtype: list_type,
|
|
41
|
-
organization_id,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Format as array of key-value pairs
|
|
46
|
-
return result.map((row: any) => ({
|
|
47
|
-
label: row.name,
|
|
48
|
-
value: row.id,
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async getActions(loggedInUser: UserData, stage_id: number) {
|
|
53
|
-
const { organization_id } = loggedInUser;
|
|
54
|
-
|
|
55
|
-
const workflowStageActionRepo =
|
|
56
|
-
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
57
|
-
|
|
58
|
-
// Step 1: Get all action_ids for the provided stage_id
|
|
59
|
-
const stageActions = await workflowStageActionRepo.find({
|
|
60
|
-
where: {
|
|
61
|
-
stage_id: stage_id,
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
if (!stageActions?.length) return [];
|
|
65
|
-
|
|
66
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
67
|
-
const mappingIds = stageActions.map((sa) => sa.id);
|
|
68
|
-
|
|
69
|
-
// Step 2: Get template codes with mapping IDs
|
|
70
|
-
const workflowActionTemplateMappingRepo =
|
|
71
|
-
this.reflectionHelper.getRepoService('ActionTemplateMapping');
|
|
72
|
-
|
|
73
|
-
const templateMappings = await workflowActionTemplateMappingRepo.find({
|
|
74
|
-
where: {
|
|
75
|
-
stg_act_mapping_id: In(mappingIds),
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const templateCodes = templateMappings.map((tm) => tm.template_code);
|
|
80
|
-
|
|
81
|
-
// Step 3: Fetch template names from frm_wf_comm_template
|
|
82
|
-
const templateCodeToName: Record<string, string> = {};
|
|
83
|
-
|
|
84
|
-
const workflowCommTemplateRepo =
|
|
85
|
-
this.reflectionHelper.getRepoService('CommTemplate');
|
|
86
|
-
|
|
87
|
-
if (templateCodes.length > 0) {
|
|
88
|
-
const templates = await workflowCommTemplateRepo.find({
|
|
89
|
-
where: {
|
|
90
|
-
code: In(templateCodes),
|
|
91
|
-
organization_id: organization_id,
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
templates.forEach((tpl) => {
|
|
96
|
-
templateCodeToName[tpl.code] = tpl.name;
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Step 4: Build map of mapping_id → template names
|
|
101
|
-
const mappingIdToTemplates: Record<number, string[]> = {};
|
|
102
|
-
|
|
103
|
-
for (const tm of templateMappings) {
|
|
104
|
-
const mappingId = tm.stg_act_mapping_id;
|
|
105
|
-
const name = templateCodeToName[tm.template_code];
|
|
106
|
-
if (name) {
|
|
107
|
-
if (!mappingIdToTemplates[mappingId]) {
|
|
108
|
-
mappingIdToTemplates[mappingId] = [];
|
|
109
|
-
}
|
|
110
|
-
mappingIdToTemplates[mappingId].push(name);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
|
|
115
|
-
const actionIdToTemplates: Record<number, string[]> = {};
|
|
116
|
-
|
|
117
|
-
for (const sa of stageActions) {
|
|
118
|
-
const mappingId = sa.id;
|
|
119
|
-
const templates = mappingIdToTemplates[mappingId];
|
|
120
|
-
if (templates?.length) {
|
|
121
|
-
if (!actionIdToTemplates[sa.action_id]) {
|
|
122
|
-
actionIdToTemplates[sa.action_id] = [];
|
|
123
|
-
}
|
|
124
|
-
actionIdToTemplates[sa.action_id].push(...templates);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Step 6: Fetch action details
|
|
129
|
-
const workflowActionRepo =
|
|
130
|
-
this.reflectionHelper.getRepoService('ActionEntity');
|
|
131
|
-
|
|
132
|
-
const actionResults = await workflowActionRepo
|
|
133
|
-
.createQueryBuilder()
|
|
134
|
-
.select([
|
|
135
|
-
'DISTINCT ON (a.id) a.*',
|
|
136
|
-
'ac.name AS action_category',
|
|
137
|
-
'ac.modalname AS modalname',
|
|
138
|
-
'ar.name AS action_requirement',
|
|
139
|
-
])
|
|
140
|
-
.from('frm_wf_action', 'a')
|
|
141
|
-
.leftJoin(
|
|
142
|
-
'frm_wf_action_category',
|
|
143
|
-
'ac',
|
|
144
|
-
'ac.id::text = a.action_category',
|
|
145
|
-
)
|
|
146
|
-
.leftJoin(
|
|
147
|
-
'frm_list_master_items',
|
|
148
|
-
'ar',
|
|
149
|
-
`ar.id::text = a.action_requirement
|
|
150
|
-
AND ar.listtype = 'ACRQ'
|
|
151
|
-
AND ar.organization_id = :orgId`,
|
|
152
|
-
{ orgId: organization_id },
|
|
153
|
-
)
|
|
154
|
-
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
155
|
-
.andWhere('a.id::text IN (:...actionIds)', { actionIds })
|
|
156
|
-
.getRawMany();
|
|
157
|
-
|
|
158
|
-
// Step 7: Enrich result with template field
|
|
159
|
-
const enrichedResult = actionResults.map((row) => {
|
|
160
|
-
const actionId = Number(row.id); // Ensure numeric ID match
|
|
161
|
-
const templates = actionIdToTemplates[actionId] || [];
|
|
162
|
-
const uniqueTemplates = [...new Set(templates)]; // remove duplicates
|
|
163
|
-
|
|
164
|
-
return {
|
|
165
|
-
...row,
|
|
166
|
-
template: uniqueTemplates.join(', '),
|
|
167
|
-
};
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
return enrichedResult;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
async getDependentActions(
|
|
174
|
-
loggedInUser: UserData,
|
|
175
|
-
stage_id: number,
|
|
176
|
-
action_id?: number,
|
|
177
|
-
) {
|
|
178
|
-
// Step 1: Get all action_ids for the provided stage_id
|
|
179
|
-
let stageActionMappingRepo =
|
|
180
|
-
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
181
|
-
|
|
182
|
-
const stageActions = await stageActionMappingRepo.find({
|
|
183
|
-
where: {
|
|
184
|
-
stage_id: stage_id,
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
if (!stageActions?.length) return [];
|
|
189
|
-
|
|
190
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
191
|
-
|
|
192
|
-
// Step 2: Fetch action details except the provided action_id incase it is provided
|
|
193
|
-
const filteredActionIds = action_id
|
|
194
|
-
? actionIds.filter((id) => id != action_id)
|
|
195
|
-
: actionIds;
|
|
196
|
-
|
|
197
|
-
let actionResults;
|
|
198
|
-
|
|
199
|
-
if (filteredActionIds.length === 0) {
|
|
200
|
-
return [];
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
|
|
204
|
-
|
|
205
|
-
actionResults = await actionRepo
|
|
206
|
-
.createQueryBuilder('a')
|
|
207
|
-
.select(['a.id AS action_id', 'a.name AS action_name'])
|
|
208
|
-
.where('a.id IN(:...actionIds)', { actionIds: filteredActionIds })
|
|
209
|
-
.getRawMany();
|
|
210
|
-
|
|
211
|
-
// Step 3: Format result
|
|
212
|
-
const enrichedResult = actionResults.map((row) => ({
|
|
213
|
-
value: row.action_id,
|
|
214
|
-
label: row.action_name,
|
|
215
|
-
}));
|
|
216
|
-
|
|
217
|
-
return enrichedResult;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
async getAction(
|
|
221
|
-
organization_id: number,
|
|
222
|
-
stage_id: number,
|
|
223
|
-
mapped_entity_id: number,
|
|
224
|
-
mapped_entity_type: string,
|
|
225
|
-
) {
|
|
226
|
-
// Step 1: Get all action mappings for the stage
|
|
227
|
-
|
|
228
|
-
const stageActionMappingRepo =
|
|
229
|
-
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
230
|
-
const stageActions = await stageActionMappingRepo.find({
|
|
231
|
-
where: {
|
|
232
|
-
stage_id: stage_id,
|
|
233
|
-
},
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
if (!stageActions?.length) {
|
|
237
|
-
return [
|
|
238
|
-
{
|
|
239
|
-
value: '0',
|
|
240
|
-
label: 'Generic',
|
|
241
|
-
},
|
|
242
|
-
];
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
246
|
-
|
|
247
|
-
// Step 2: Fetch all actions with category details
|
|
248
|
-
const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
|
|
249
|
-
|
|
250
|
-
const actions = await actionRepo
|
|
251
|
-
.createQueryBuilder('a')
|
|
252
|
-
.select([
|
|
253
|
-
'a.id AS action_id',
|
|
254
|
-
'a.name AS action_name',
|
|
255
|
-
'a.reason_code AS action_reason_code',
|
|
256
|
-
'a.default_reason_code AS default_reason_code',
|
|
257
|
-
'a.default_value AS default_value',
|
|
258
|
-
'a.mode AS mode',
|
|
259
|
-
'a.action_category AS action_category_id',
|
|
260
|
-
'ac.reason_code AS category_reason_code',
|
|
261
|
-
'ac.modalname AS modalname',
|
|
262
|
-
'ac.logo AS logo',
|
|
263
|
-
'ac.name AS action_category_name',
|
|
264
|
-
'a.dependent_action_id AS dependent_action_id',
|
|
265
|
-
])
|
|
266
|
-
.leftJoin(
|
|
267
|
-
'frm_wf_action_category',
|
|
268
|
-
'ac',
|
|
269
|
-
'ac.id = a.action_category::bigint',
|
|
270
|
-
)
|
|
271
|
-
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
272
|
-
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
273
|
-
.orderBy('a.sequence', 'ASC')
|
|
274
|
-
.getRawMany();
|
|
275
|
-
|
|
276
|
-
// Step 3: Fetch action_data
|
|
277
|
-
const actionDataRepo =
|
|
278
|
-
this.reflectionHelper.getRepoService('ActionDataEntity');
|
|
279
|
-
|
|
280
|
-
const actionData = await actionDataRepo
|
|
281
|
-
.createQueryBuilder('ad')
|
|
282
|
-
.select([
|
|
283
|
-
'ad.action_id AS action_id',
|
|
284
|
-
'ad.is_current AS is_current',
|
|
285
|
-
'ad.is_mandatory AS is_mandatory',
|
|
286
|
-
'ad.is_done AS is_done',
|
|
287
|
-
])
|
|
288
|
-
.where('ad.stage_id = :stageId', { stageId: stage_id })
|
|
289
|
-
.andWhere('ad.action_id IN (:...actionIds)', { actionIds })
|
|
290
|
-
.andWhere('ad.mapped_entity_id = :mapped_entity_id', { mapped_entity_id })
|
|
291
|
-
.andWhere('ad.mapped_entity_type = :mapped_entity_type', {
|
|
292
|
-
mapped_entity_type,
|
|
293
|
-
})
|
|
294
|
-
.getRawMany();
|
|
295
|
-
|
|
296
|
-
const actionIdToData = actionData.reduce((acc, row) => {
|
|
297
|
-
acc[row.action_id] = {
|
|
298
|
-
is_current: row.is_current === 'Y',
|
|
299
|
-
is_mandatory: row.is_mandatory,
|
|
300
|
-
is_done: row.is_done,
|
|
301
|
-
};
|
|
302
|
-
return acc;
|
|
303
|
-
}, {});
|
|
304
|
-
|
|
305
|
-
// Step 5: Enrich actions
|
|
306
|
-
const enrichedResult = actions.map((row) => {
|
|
307
|
-
const data = actionIdToData[row.action_id];
|
|
308
|
-
|
|
309
|
-
const reason_code =
|
|
310
|
-
row.action_reason_code && row.action_reason_code.trim()
|
|
311
|
-
? row.action_reason_code
|
|
312
|
-
: row.category_reason_code;
|
|
313
|
-
|
|
314
|
-
return {
|
|
315
|
-
value: row.action_id,
|
|
316
|
-
dependent_action_id: row.dependent_action_id,
|
|
317
|
-
label: row.action_name,
|
|
318
|
-
modalname: row.modalname,
|
|
319
|
-
logo: row.logo,
|
|
320
|
-
mode: row.mode,
|
|
321
|
-
name: row.action_category_name,
|
|
322
|
-
reason_code,
|
|
323
|
-
default_reason_code: row.default_reason_code,
|
|
324
|
-
is_default: row.default_value,
|
|
325
|
-
is_current: data?.is_current,
|
|
326
|
-
is_done: data?.is_done,
|
|
327
|
-
is_mandatory: data?.is_mandatory,
|
|
328
|
-
};
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
// Step 6: Add fallback option
|
|
332
|
-
enrichedResult.push({
|
|
333
|
-
value: '0',
|
|
334
|
-
label: 'Generic',
|
|
335
|
-
} as any);
|
|
336
|
-
|
|
337
|
-
return enrichedResult;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
1
|
+
import { BadRequestException, Injectable } from '@nestjs/common';
|
|
2
|
+
import { In } from 'typeorm';
|
|
3
|
+
import { UserData } from 'src/module/user/entity/user.entity';
|
|
4
|
+
import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class ActionRepository {
|
|
8
|
+
constructor(private readonly reflectionHelper: ReflectionHelper) {}
|
|
9
|
+
|
|
10
|
+
async getReasonCode(loggedInUser: UserData): Promise<any> {
|
|
11
|
+
const { organization_id } = loggedInUser;
|
|
12
|
+
const listMasterRepo =
|
|
13
|
+
this.reflectionHelper.getRepoService('ListMasterData');
|
|
14
|
+
const result = await listMasterRepo.find({
|
|
15
|
+
where: {
|
|
16
|
+
organization_id,
|
|
17
|
+
source: 'master',
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const formatted = result.map((item: any) => ({
|
|
22
|
+
label: item.name,
|
|
23
|
+
value: item.type,
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
return formatted;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async defaultReasonCode(list_type: string, loggedInUser: UserData) {
|
|
30
|
+
const { organization_id } = loggedInUser;
|
|
31
|
+
if (!list_type) {
|
|
32
|
+
throw new BadRequestException('list_type is required');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const listMasterItemsRepo =
|
|
36
|
+
this.reflectionHelper.getRepoService('ListMasterItems');
|
|
37
|
+
|
|
38
|
+
const result = await listMasterItemsRepo.find({
|
|
39
|
+
where: {
|
|
40
|
+
listtype: list_type,
|
|
41
|
+
organization_id,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Format as array of key-value pairs
|
|
46
|
+
return result.map((row: any) => ({
|
|
47
|
+
label: row.name,
|
|
48
|
+
value: row.id,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async getActions(loggedInUser: UserData, stage_id: number) {
|
|
53
|
+
const { organization_id } = loggedInUser;
|
|
54
|
+
|
|
55
|
+
const workflowStageActionRepo =
|
|
56
|
+
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
57
|
+
|
|
58
|
+
// Step 1: Get all action_ids for the provided stage_id
|
|
59
|
+
const stageActions = await workflowStageActionRepo.find({
|
|
60
|
+
where: {
|
|
61
|
+
stage_id: stage_id,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
if (!stageActions?.length) return [];
|
|
65
|
+
|
|
66
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
67
|
+
const mappingIds = stageActions.map((sa) => sa.id);
|
|
68
|
+
|
|
69
|
+
// Step 2: Get template codes with mapping IDs
|
|
70
|
+
const workflowActionTemplateMappingRepo =
|
|
71
|
+
this.reflectionHelper.getRepoService('ActionTemplateMapping');
|
|
72
|
+
|
|
73
|
+
const templateMappings = await workflowActionTemplateMappingRepo.find({
|
|
74
|
+
where: {
|
|
75
|
+
stg_act_mapping_id: In(mappingIds),
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const templateCodes = templateMappings.map((tm) => tm.template_code);
|
|
80
|
+
|
|
81
|
+
// Step 3: Fetch template names from frm_wf_comm_template
|
|
82
|
+
const templateCodeToName: Record<string, string> = {};
|
|
83
|
+
|
|
84
|
+
const workflowCommTemplateRepo =
|
|
85
|
+
this.reflectionHelper.getRepoService('CommTemplate');
|
|
86
|
+
|
|
87
|
+
if (templateCodes.length > 0) {
|
|
88
|
+
const templates = await workflowCommTemplateRepo.find({
|
|
89
|
+
where: {
|
|
90
|
+
code: In(templateCodes),
|
|
91
|
+
organization_id: organization_id,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
templates.forEach((tpl) => {
|
|
96
|
+
templateCodeToName[tpl.code] = tpl.name;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Step 4: Build map of mapping_id → template names
|
|
101
|
+
const mappingIdToTemplates: Record<number, string[]> = {};
|
|
102
|
+
|
|
103
|
+
for (const tm of templateMappings) {
|
|
104
|
+
const mappingId = tm.stg_act_mapping_id;
|
|
105
|
+
const name = templateCodeToName[tm.template_code];
|
|
106
|
+
if (name) {
|
|
107
|
+
if (!mappingIdToTemplates[mappingId]) {
|
|
108
|
+
mappingIdToTemplates[mappingId] = [];
|
|
109
|
+
}
|
|
110
|
+
mappingIdToTemplates[mappingId].push(name);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
|
|
115
|
+
const actionIdToTemplates: Record<number, string[]> = {};
|
|
116
|
+
|
|
117
|
+
for (const sa of stageActions) {
|
|
118
|
+
const mappingId = sa.id;
|
|
119
|
+
const templates = mappingIdToTemplates[mappingId];
|
|
120
|
+
if (templates?.length) {
|
|
121
|
+
if (!actionIdToTemplates[sa.action_id]) {
|
|
122
|
+
actionIdToTemplates[sa.action_id] = [];
|
|
123
|
+
}
|
|
124
|
+
actionIdToTemplates[sa.action_id].push(...templates);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Step 6: Fetch action details
|
|
129
|
+
const workflowActionRepo =
|
|
130
|
+
this.reflectionHelper.getRepoService('ActionEntity');
|
|
131
|
+
|
|
132
|
+
const actionResults = await workflowActionRepo
|
|
133
|
+
.createQueryBuilder()
|
|
134
|
+
.select([
|
|
135
|
+
'DISTINCT ON (a.id) a.*',
|
|
136
|
+
'ac.name AS action_category',
|
|
137
|
+
'ac.modalname AS modalname',
|
|
138
|
+
'ar.name AS action_requirement',
|
|
139
|
+
])
|
|
140
|
+
.from('frm_wf_action', 'a')
|
|
141
|
+
.leftJoin(
|
|
142
|
+
'frm_wf_action_category',
|
|
143
|
+
'ac',
|
|
144
|
+
'ac.id::text = a.action_category',
|
|
145
|
+
)
|
|
146
|
+
.leftJoin(
|
|
147
|
+
'frm_list_master_items',
|
|
148
|
+
'ar',
|
|
149
|
+
`ar.id::text = a.action_requirement
|
|
150
|
+
AND ar.listtype = 'ACRQ'
|
|
151
|
+
AND ar.organization_id = :orgId`,
|
|
152
|
+
{ orgId: organization_id },
|
|
153
|
+
)
|
|
154
|
+
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
155
|
+
.andWhere('a.id::text IN (:...actionIds)', { actionIds })
|
|
156
|
+
.getRawMany();
|
|
157
|
+
|
|
158
|
+
// Step 7: Enrich result with template field
|
|
159
|
+
const enrichedResult = actionResults.map((row) => {
|
|
160
|
+
const actionId = Number(row.id); // Ensure numeric ID match
|
|
161
|
+
const templates = actionIdToTemplates[actionId] || [];
|
|
162
|
+
const uniqueTemplates = [...new Set(templates)]; // remove duplicates
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
...row,
|
|
166
|
+
template: uniqueTemplates.join(', '),
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
return enrichedResult;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async getDependentActions(
|
|
174
|
+
loggedInUser: UserData,
|
|
175
|
+
stage_id: number,
|
|
176
|
+
action_id?: number,
|
|
177
|
+
) {
|
|
178
|
+
// Step 1: Get all action_ids for the provided stage_id
|
|
179
|
+
let stageActionMappingRepo =
|
|
180
|
+
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
181
|
+
|
|
182
|
+
const stageActions = await stageActionMappingRepo.find({
|
|
183
|
+
where: {
|
|
184
|
+
stage_id: stage_id,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
if (!stageActions?.length) return [];
|
|
189
|
+
|
|
190
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
191
|
+
|
|
192
|
+
// Step 2: Fetch action details except the provided action_id incase it is provided
|
|
193
|
+
const filteredActionIds = action_id
|
|
194
|
+
? actionIds.filter((id) => id != action_id)
|
|
195
|
+
: actionIds;
|
|
196
|
+
|
|
197
|
+
let actionResults;
|
|
198
|
+
|
|
199
|
+
if (filteredActionIds.length === 0) {
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
|
|
204
|
+
|
|
205
|
+
actionResults = await actionRepo
|
|
206
|
+
.createQueryBuilder('a')
|
|
207
|
+
.select(['a.id AS action_id', 'a.name AS action_name'])
|
|
208
|
+
.where('a.id IN(:...actionIds)', { actionIds: filteredActionIds })
|
|
209
|
+
.getRawMany();
|
|
210
|
+
|
|
211
|
+
// Step 3: Format result
|
|
212
|
+
const enrichedResult = actionResults.map((row) => ({
|
|
213
|
+
value: row.action_id,
|
|
214
|
+
label: row.action_name,
|
|
215
|
+
}));
|
|
216
|
+
|
|
217
|
+
return enrichedResult;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
async getAction(
|
|
221
|
+
organization_id: number,
|
|
222
|
+
stage_id: number,
|
|
223
|
+
mapped_entity_id: number,
|
|
224
|
+
mapped_entity_type: string,
|
|
225
|
+
) {
|
|
226
|
+
// Step 1: Get all action mappings for the stage
|
|
227
|
+
|
|
228
|
+
const stageActionMappingRepo =
|
|
229
|
+
this.reflectionHelper.getRepoService('StageActionMapping');
|
|
230
|
+
const stageActions = await stageActionMappingRepo.find({
|
|
231
|
+
where: {
|
|
232
|
+
stage_id: stage_id,
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
if (!stageActions?.length) {
|
|
237
|
+
return [
|
|
238
|
+
{
|
|
239
|
+
value: '0',
|
|
240
|
+
label: 'Generic',
|
|
241
|
+
},
|
|
242
|
+
];
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
246
|
+
|
|
247
|
+
// Step 2: Fetch all actions with category details
|
|
248
|
+
const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
|
|
249
|
+
|
|
250
|
+
const actions = await actionRepo
|
|
251
|
+
.createQueryBuilder('a')
|
|
252
|
+
.select([
|
|
253
|
+
'a.id AS action_id',
|
|
254
|
+
'a.name AS action_name',
|
|
255
|
+
'a.reason_code AS action_reason_code',
|
|
256
|
+
'a.default_reason_code AS default_reason_code',
|
|
257
|
+
'a.default_value AS default_value',
|
|
258
|
+
'a.mode AS mode',
|
|
259
|
+
'a.action_category AS action_category_id',
|
|
260
|
+
'ac.reason_code AS category_reason_code',
|
|
261
|
+
'ac.modalname AS modalname',
|
|
262
|
+
'ac.logo AS logo',
|
|
263
|
+
'ac.name AS action_category_name',
|
|
264
|
+
'a.dependent_action_id AS dependent_action_id',
|
|
265
|
+
])
|
|
266
|
+
.leftJoin(
|
|
267
|
+
'frm_wf_action_category',
|
|
268
|
+
'ac',
|
|
269
|
+
'ac.id = a.action_category::bigint',
|
|
270
|
+
)
|
|
271
|
+
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
272
|
+
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
273
|
+
.orderBy('a.sequence', 'ASC')
|
|
274
|
+
.getRawMany();
|
|
275
|
+
|
|
276
|
+
// Step 3: Fetch action_data
|
|
277
|
+
const actionDataRepo =
|
|
278
|
+
this.reflectionHelper.getRepoService('ActionDataEntity');
|
|
279
|
+
|
|
280
|
+
const actionData = await actionDataRepo
|
|
281
|
+
.createQueryBuilder('ad')
|
|
282
|
+
.select([
|
|
283
|
+
'ad.action_id AS action_id',
|
|
284
|
+
'ad.is_current AS is_current',
|
|
285
|
+
'ad.is_mandatory AS is_mandatory',
|
|
286
|
+
'ad.is_done AS is_done',
|
|
287
|
+
])
|
|
288
|
+
.where('ad.stage_id = :stageId', { stageId: stage_id })
|
|
289
|
+
.andWhere('ad.action_id IN (:...actionIds)', { actionIds })
|
|
290
|
+
.andWhere('ad.mapped_entity_id = :mapped_entity_id', { mapped_entity_id })
|
|
291
|
+
.andWhere('ad.mapped_entity_type = :mapped_entity_type', {
|
|
292
|
+
mapped_entity_type,
|
|
293
|
+
})
|
|
294
|
+
.getRawMany();
|
|
295
|
+
|
|
296
|
+
const actionIdToData = actionData.reduce((acc, row) => {
|
|
297
|
+
acc[row.action_id] = {
|
|
298
|
+
is_current: row.is_current === 'Y',
|
|
299
|
+
is_mandatory: row.is_mandatory,
|
|
300
|
+
is_done: row.is_done,
|
|
301
|
+
};
|
|
302
|
+
return acc;
|
|
303
|
+
}, {});
|
|
304
|
+
|
|
305
|
+
// Step 5: Enrich actions
|
|
306
|
+
const enrichedResult = actions.map((row) => {
|
|
307
|
+
const data = actionIdToData[row.action_id];
|
|
308
|
+
|
|
309
|
+
const reason_code =
|
|
310
|
+
row.action_reason_code && row.action_reason_code.trim()
|
|
311
|
+
? row.action_reason_code
|
|
312
|
+
: row.category_reason_code;
|
|
313
|
+
|
|
314
|
+
return {
|
|
315
|
+
value: row.action_id,
|
|
316
|
+
dependent_action_id: row.dependent_action_id,
|
|
317
|
+
label: row.action_name,
|
|
318
|
+
modalname: row.modalname,
|
|
319
|
+
logo: row.logo,
|
|
320
|
+
mode: row.mode,
|
|
321
|
+
name: row.action_category_name,
|
|
322
|
+
reason_code,
|
|
323
|
+
default_reason_code: row.default_reason_code,
|
|
324
|
+
is_default: row.default_value,
|
|
325
|
+
is_current: data?.is_current,
|
|
326
|
+
is_done: data?.is_done,
|
|
327
|
+
is_mandatory: data?.is_mandatory,
|
|
328
|
+
};
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// Step 6: Add fallback option
|
|
332
|
+
enrichedResult.push({
|
|
333
|
+
value: '0',
|
|
334
|
+
label: 'Generic',
|
|
335
|
+
} as any);
|
|
336
|
+
|
|
337
|
+
return enrichedResult;
|
|
338
|
+
}
|
|
339
|
+
}
|