rez_core 5.0.48 → 5.0.49
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/.prettierrc +3 -3
- package/README.md +99 -99
- package/dist/module/auth/guards/role.guard.js +3 -3
- package/dist/module/auth/services/auth.service.js +2 -2
- package/dist/module/filter/repository/saved-filter.repository.js +4 -4
- package/dist/module/filter/service/filter-evaluator.service.js +2 -2
- package/dist/module/filter/service/filter.service.js +22 -22
- package/dist/module/integration/examples/usage.example.js +9 -9
- package/dist/module/integration/service/integration.service.js +1 -1
- package/dist/module/integration/service/wrapper.service.js +26 -26
- package/dist/module/listmaster/service/list-master-item.service.js +2 -2
- package/dist/module/mapper/service/field-mapper.service.js +4 -4
- package/dist/module/meta/repository/entity-attribute-update.repository.js +3 -3
- package/dist/module/meta/repository/entity-master.repository.js +6 -6
- package/dist/module/meta/service/entity-dynamic.service.js +44 -44
- package/dist/module/meta/service/entity-list.service.js +3 -3
- package/dist/module/meta/service/entity-relation.service.js +9 -9
- package/dist/module/meta/service/entity-service-impl.service.js +3 -3
- package/dist/module/meta/service/resolver.service.d.ts +3 -1
- package/dist/module/meta/service/resolver.service.js +22 -7
- package/dist/module/meta/service/resolver.service.js.map +1 -1
- package/dist/module/module/repository/menu.repository.js +17 -17
- package/dist/module/notification/service/notification.service.js +10 -10
- package/dist/module/user/controller/login.controller.js +18 -18
- package/dist/module/user/service/role.service.js +4 -4
- package/dist/module/user/service/user-session.service.js +2 -2
- package/dist/module/workflow/repository/action.repository.js +20 -20
- package/dist/module/workflow/repository/comm-template.repository.js +6 -6
- package/dist/module/workflow/repository/form-master.repository.js +2 -2
- package/dist/module/workflow/repository/stage-group.repository.js +20 -20
- package/dist/module/workflow/repository/stage-movement.repository.js +17 -17
- package/dist/module/workflow/repository/stage.repository.js +8 -8
- package/dist/module/workflow/service/action-template-mapping.service.js +13 -13
- package/dist/module/workflow/service/action.service.js +7 -7
- package/dist/module/workflow/service/entity-modification.service.js +2 -2
- package/dist/module/workflow/service/stage-group.service.js +2 -2
- package/dist/module/workflow/service/stage.service.js +2 -2
- package/dist/module/workflow/service/task.service.js +35 -35
- package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
- package/dist/module/workflow/service/workflow-meta.service.js +26 -26
- package/dist/module/workflow/service/workflow.service.js +2 -2
- package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
- package/dist/module/workflow-schedule/processors/schedule.processor.js +4 -4
- package/dist/module/workflow-schedule/service/workflow-schedule.service.js +9 -9
- 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 +124 -124
- package/src/app.controller.ts +12 -12
- package/src/app.module.ts +66 -66
- 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 +91 -91
- 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 +50 -50
- 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 +36 -36
- 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 +42 -42
- package/src/module/dashboard/service/dashboard.service.ts +73 -73
- package/src/module/dev/dev.module.ts +12 -12
- package/src/module/dev/service/dev.service.ts +7 -7
- package/src/module/enterprise/controller/organization.controller.ts +36 -36
- package/src/module/enterprise/enterprise.module.ts +30 -30
- package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
- package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
- package/src/module/enterprise/entity/organization.entity.ts +92 -92
- package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
- package/src/module/enterprise/repository/organization.repository.ts +26 -26
- package/src/module/enterprise/repository/school.repository.ts +278 -278
- package/src/module/enterprise/service/brand.service.ts +5 -5
- package/src/module/enterprise/service/enterprise.service.ts +16 -16
- package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
- package/src/module/enterprise/service/organization.service.ts +145 -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 +234 -234
- package/src/module/filter/controller/filter.controller.ts +84 -84
- package/src/module/filter/dto/filter-request.dto.ts +38 -38
- package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
- package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
- package/src/module/filter/filter.module.ts +31 -31
- package/src/module/filter/repository/saved-filter.repository.ts +168 -168
- package/src/module/filter/service/filter-evaluator.service.ts +86 -86
- package/src/module/filter/service/filter.service.ts +1235 -1235
- package/src/module/filter/service/saved-filter.service.ts +170 -170
- 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 +2633 -2633
- package/src/module/integration/service/oauth.service.ts +224 -224
- package/src/module/integration/service/wrapper.service.ts +701 -701
- 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 +73 -73
- 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 +75 -75
- 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 +46 -46
- 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 +292 -292
- package/src/module/listmaster/service/list-master-registry.ts +15 -15
- package/src/module/listmaster/service/list-master.service.ts +544 -544
- 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 +271 -271
- package/src/module/mapper/service/mapper.service.ts +81 -81
- package/src/module/master/controller/master.controller.ts +74 -74
- package/src/module/master/service/master.service.ts +483 -483
- 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 +392 -392
- package/src/module/meta/controller/entity.public.controller.ts +75 -75
- package/src/module/meta/controller/media.controller.ts +107 -107
- package/src/module/meta/controller/meta.controller.ts +96 -96
- package/src/module/meta/controller/view-master.controller.ts +86 -86
- 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 +9 -9
- package/src/module/meta/entity/app-master.entity.ts +34 -34
- 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 +166 -166
- package/src/module/meta/repository/app-master.repository.ts +20 -20
- package/src/module/meta/repository/attribute-master.repository.ts +138 -138
- package/src/module/meta/repository/entity-attribute-update.repository.ts +44 -44
- package/src/module/meta/repository/entity-master.repository.ts +111 -111
- 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 +130 -130
- package/src/module/meta/service/common.service.ts +9 -9
- package/src/module/meta/service/entity-attribute-update.service.ts +28 -28
- package/src/module/meta/service/entity-dynamic.service.ts +821 -821
- package/src/module/meta/service/entity-list.service.ts +205 -205
- 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 +87 -87
- package/src/module/meta/service/entity-service-impl.service.ts +525 -525
- package/src/module/meta/service/entity-table-column.service.ts +39 -39
- package/src/module/meta/service/entity-table.service.ts +150 -150
- package/src/module/meta/service/entity-validation.service.ts +187 -187
- package/src/module/meta/service/entity.service.ts +67 -67
- package/src/module/meta/service/field-group.service.ts +103 -103
- package/src/module/meta/service/media-data.service.ts +507 -507
- 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 +291 -271
- 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 +134 -134
- 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 +191 -191
- 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 +195 -195
- 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 +160 -160
- 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 +59 -59
- 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 +189 -189
- package/src/module/user/service/user-role-mapping.service.ts +98 -98
- package/src/module/user/service/user-session.service.ts +168 -168
- 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 +48 -48
- package/src/module/workflow/controller/stage.controller.ts +50 -50
- 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 +334 -334
- package/src/module/workflow/repository/action.repository.ts +324 -324
- package/src/module/workflow/repository/activity-log.repository.ts +148 -148
- package/src/module/workflow/repository/comm-template.repository.ts +149 -149
- package/src/module/workflow/repository/form-master.repository.ts +59 -59
- package/src/module/workflow/repository/stage-group.repository.ts +197 -197
- package/src/module/workflow/repository/stage-movement.repository.ts +246 -246
- package/src/module/workflow/repository/stage.repository.ts +172 -172
- package/src/module/workflow/repository/task.repository.ts +134 -134
- 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 +131 -131
- package/src/module/workflow/service/action.service.ts +279 -279
- package/src/module/workflow/service/activity-log.service.ts +107 -107
- package/src/module/workflow/service/comm-template.service.ts +180 -180
- 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 +331 -331
- package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
- package/src/module/workflow/service/stage-group.service.ts +342 -342
- package/src/module/workflow/service/stage.service.ts +199 -199
- package/src/module/workflow/service/task.service.ts +558 -558
- package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
- package/src/module/workflow/service/workflow-meta.service.ts +654 -654
- package/src/module/workflow/service/workflow.service.ts +205 -205
- 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 +224 -224
- package/src/module/workflow-automation/service/workflow-automation.service.ts +515 -515
- 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 +255 -255
- 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 +584 -584
- package/src/module/workflow-schedule/service/workflow-schedule.service.ts +600 -600
- 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
- package/.claude/settings.local.json +0 -26
- package/.idea/250218_nodejs_core.iml +0 -9
- package/.idea/codeStyles/Project.xml +0 -59
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/copilot.data.migration.agent.xml +0 -6
- package/.idea/copilot.data.migration.ask.xml +0 -6
- package/.idea/copilot.data.migration.ask2agent.xml +0 -6
- package/.idea/copilot.data.migration.edit.xml +0 -6
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -6
- package/.idea/vcs.xml +0 -6
- package/server.log +0 -850
|
@@ -1,324 +1,324 @@
|
|
|
1
|
-
import {
|
|
2
|
-
BadRequestException,
|
|
3
|
-
Inject,
|
|
4
|
-
Injectable,
|
|
5
|
-
NotFoundException,
|
|
6
|
-
} from '@nestjs/common';
|
|
7
|
-
import { InjectRepository } from '@nestjs/typeorm';
|
|
8
|
-
import { DataSource, Repository } from 'typeorm';
|
|
9
|
-
import { ActionEntity } from '../entity/action.entity';
|
|
10
|
-
import { UserData } from 'src/module/user/entity/user.entity';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class ActionRepository {
|
|
14
|
-
constructor(
|
|
15
|
-
@InjectRepository(ActionEntity)
|
|
16
|
-
private readonly actionRepository: Repository<ActionEntity>,
|
|
17
|
-
private readonly dataSource: DataSource,
|
|
18
|
-
) {}
|
|
19
|
-
|
|
20
|
-
async getReasonCode(loggedInUser: UserData): Promise<any> {
|
|
21
|
-
const { organization_id } = loggedInUser;
|
|
22
|
-
const result = await this.dataSource.query(
|
|
23
|
-
`
|
|
24
|
-
SELECT name, type
|
|
25
|
-
FROM frm_list_master
|
|
26
|
-
WHERE organization_id = $1 AND source = 'master'
|
|
27
|
-
`,
|
|
28
|
-
[organization_id],
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
const formatted = result.map((item: any) => ({
|
|
32
|
-
label: item.name,
|
|
33
|
-
value: item.type,
|
|
34
|
-
}));
|
|
35
|
-
|
|
36
|
-
return formatted;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async defaultReasonCode(list_type: string, loggedInUser: UserData) {
|
|
40
|
-
const { organization_id } = loggedInUser;
|
|
41
|
-
if (!list_type) {
|
|
42
|
-
throw new BadRequestException('list_type is required');
|
|
43
|
-
}
|
|
44
|
-
const result = await this.dataSource.query(
|
|
45
|
-
`
|
|
46
|
-
SELECT name, id
|
|
47
|
-
FROM frm_list_master_items
|
|
48
|
-
WHERE listtype = $1 AND organization_id = $2
|
|
49
|
-
`,
|
|
50
|
-
[list_type, organization_id],
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
// Format as array of key-value pairs
|
|
54
|
-
return result.map((row: any) => ({
|
|
55
|
-
label: row.name,
|
|
56
|
-
value: row.id,
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async getActions(loggedInUser: UserData, stage_id: number) {
|
|
61
|
-
const { organization_id } = loggedInUser;
|
|
62
|
-
|
|
63
|
-
// Step 1: Get all action_ids for the provided stage_id
|
|
64
|
-
const stageActions = await this.dataSource.query(
|
|
65
|
-
`
|
|
66
|
-
SELECT id, action_id
|
|
67
|
-
FROM frm_wf_stage_action_mapping
|
|
68
|
-
WHERE stage_id = $1
|
|
69
|
-
`,
|
|
70
|
-
[stage_id],
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
if (!stageActions?.length) return [];
|
|
74
|
-
|
|
75
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
76
|
-
const mappingIds = stageActions.map((sa) => sa.id);
|
|
77
|
-
|
|
78
|
-
// Step 2: Get template codes with mapping IDs
|
|
79
|
-
const templateMappings = await this.dataSource.query(
|
|
80
|
-
`
|
|
81
|
-
SELECT stg_act_mapping_id, template_code
|
|
82
|
-
FROM frm_wf_action_template_mapping
|
|
83
|
-
WHERE stg_act_mapping_id IN (${mappingIds.map(() => '?').join(',')})
|
|
84
|
-
`,
|
|
85
|
-
mappingIds,
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
const templateCodes = templateMappings.map((tm) => tm.template_code);
|
|
89
|
-
|
|
90
|
-
// Step 3: Fetch template names from frm_wf_comm_template
|
|
91
|
-
const templateCodeToName: Record<string, string> = {};
|
|
92
|
-
|
|
93
|
-
if (templateCodes.length > 0) {
|
|
94
|
-
const templates = await this.dataSource
|
|
95
|
-
.createQueryBuilder()
|
|
96
|
-
.select(['t.code AS code', 't.name AS name'])
|
|
97
|
-
.from('frm_wf_comm_template', 't')
|
|
98
|
-
.where('t.code IN (:...codes)', { codes: templateCodes })
|
|
99
|
-
.andWhere('t.organization_id = :orgId', { orgId: organization_id })
|
|
100
|
-
.getRawMany();
|
|
101
|
-
|
|
102
|
-
templates.forEach((tpl) => {
|
|
103
|
-
templateCodeToName[tpl.code] = tpl.name;
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Step 4: Build map of mapping_id → template names
|
|
108
|
-
const mappingIdToTemplates: Record<number, string[]> = {};
|
|
109
|
-
|
|
110
|
-
for (const tm of templateMappings) {
|
|
111
|
-
const mappingId = tm.stg_act_mapping_id;
|
|
112
|
-
const name = templateCodeToName[tm.template_code];
|
|
113
|
-
if (name) {
|
|
114
|
-
if (!mappingIdToTemplates[mappingId]) {
|
|
115
|
-
mappingIdToTemplates[mappingId] = [];
|
|
116
|
-
}
|
|
117
|
-
mappingIdToTemplates[mappingId].push(name);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
|
|
122
|
-
const actionIdToTemplates: Record<number, string[]> = {};
|
|
123
|
-
|
|
124
|
-
for (const sa of stageActions) {
|
|
125
|
-
const mappingId = sa.id;
|
|
126
|
-
const templates = mappingIdToTemplates[mappingId];
|
|
127
|
-
if (templates?.length) {
|
|
128
|
-
if (!actionIdToTemplates[sa.action_id]) {
|
|
129
|
-
actionIdToTemplates[sa.action_id] = [];
|
|
130
|
-
}
|
|
131
|
-
actionIdToTemplates[sa.action_id].push(...templates);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Step 6: Fetch action details
|
|
136
|
-
const actionResults = await this.dataSource
|
|
137
|
-
.createQueryBuilder()
|
|
138
|
-
.select([
|
|
139
|
-
'a.*',
|
|
140
|
-
'ac.name AS action_category',
|
|
141
|
-
'ac.modalname AS modalname',
|
|
142
|
-
'ar.name AS action_requirement',
|
|
143
|
-
])
|
|
144
|
-
.from('frm_wf_action', 'a')
|
|
145
|
-
.leftJoin('frm_wf_action_category', 'ac', 'ac.id = a.action_category')
|
|
146
|
-
.leftJoin(
|
|
147
|
-
'frm_list_master_items',
|
|
148
|
-
'ar',
|
|
149
|
-
`ar.id = a.action_requirement AND ar.listtype = 'ACRQ' AND ar.organization_id = :orgId`,
|
|
150
|
-
{ orgId: organization_id },
|
|
151
|
-
)
|
|
152
|
-
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
153
|
-
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
154
|
-
.getRawMany();
|
|
155
|
-
|
|
156
|
-
// Step 7: Enrich result with template field
|
|
157
|
-
const enrichedResult = actionResults.map((row) => {
|
|
158
|
-
const actionId = Number(row.id); // Ensure numeric ID match
|
|
159
|
-
const templates = actionIdToTemplates[actionId] || [];
|
|
160
|
-
const uniqueTemplates = [...new Set(templates)]; // remove duplicates
|
|
161
|
-
|
|
162
|
-
return {
|
|
163
|
-
...row,
|
|
164
|
-
template: uniqueTemplates.join(', '),
|
|
165
|
-
};
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
return enrichedResult;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
async getDependentActions(
|
|
172
|
-
loggedInUser: UserData,
|
|
173
|
-
stage_id: number,
|
|
174
|
-
action_id?: number,
|
|
175
|
-
) {
|
|
176
|
-
// Step 1: Get all action_ids for the provided stage_id
|
|
177
|
-
const stageActions = await this.dataSource.query(
|
|
178
|
-
`
|
|
179
|
-
SELECT action_id
|
|
180
|
-
FROM frm_wf_stage_action_mapping
|
|
181
|
-
WHERE stage_id = $1
|
|
182
|
-
`,
|
|
183
|
-
[stage_id],
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
if (!stageActions?.length) return [];
|
|
187
|
-
|
|
188
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
189
|
-
|
|
190
|
-
// Step 2: Fetch action details except the provided action_id incase it is provided
|
|
191
|
-
const filteredActionIds = action_id
|
|
192
|
-
? actionIds.filter((id) => id != action_id)
|
|
193
|
-
: actionIds;
|
|
194
|
-
|
|
195
|
-
let actionResults;
|
|
196
|
-
|
|
197
|
-
if (filteredActionIds.length === 0) {
|
|
198
|
-
return [];
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
actionResults = await this.dataSource
|
|
202
|
-
.createQueryBuilder()
|
|
203
|
-
.select(['a.id AS action_id', 'a.name AS action_name'])
|
|
204
|
-
.from('frm_wf_action', 'a')
|
|
205
|
-
.andWhere('a.id IN(:...actionIds)', { actionIds: filteredActionIds })
|
|
206
|
-
.getRawMany();
|
|
207
|
-
|
|
208
|
-
// Step 3: Format result
|
|
209
|
-
const enrichedResult = actionResults.map((row) => ({
|
|
210
|
-
value: row.action_id,
|
|
211
|
-
label: row.action_name,
|
|
212
|
-
}));
|
|
213
|
-
|
|
214
|
-
return enrichedResult;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
async getAction(
|
|
218
|
-
organization_id: number,
|
|
219
|
-
stage_id: number,
|
|
220
|
-
mapped_entity_id: number,
|
|
221
|
-
mapped_entity_type: string,
|
|
222
|
-
) {
|
|
223
|
-
// Step 1: Get all action mappings for the stage
|
|
224
|
-
const stageActions = await this.dataSource.query(
|
|
225
|
-
`SELECT id, action_id FROM frm_wf_stage_action_mapping WHERE stage_id = $1`,
|
|
226
|
-
[stage_id],
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
if (!stageActions?.length) {
|
|
230
|
-
return [
|
|
231
|
-
{
|
|
232
|
-
value: '0',
|
|
233
|
-
label: 'Generic',
|
|
234
|
-
},
|
|
235
|
-
];
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
239
|
-
|
|
240
|
-
// Step 2: Fetch all actions with category details
|
|
241
|
-
const actions = await this.dataSource
|
|
242
|
-
.createQueryBuilder()
|
|
243
|
-
.select([
|
|
244
|
-
'a.id AS action_id',
|
|
245
|
-
'a.name AS action_name',
|
|
246
|
-
'a.reason_code AS action_reason_code',
|
|
247
|
-
'a.default_reason_code AS default_reason_code',
|
|
248
|
-
'a.default_value AS default_value',
|
|
249
|
-
'a.mode AS mode',
|
|
250
|
-
'a.action_category AS action_category_id',
|
|
251
|
-
'ac.reason_code AS category_reason_code',
|
|
252
|
-
'ac.modalName AS modalName',
|
|
253
|
-
'ac.logo AS logo',
|
|
254
|
-
'ac.name AS action_category_name',
|
|
255
|
-
'a.dependent_action_id AS dependent_action_id',
|
|
256
|
-
])
|
|
257
|
-
.from('frm_wf_action', 'a')
|
|
258
|
-
.leftJoin('frm_wf_action_category', 'ac', 'ac.id::text = a.action_category::text')
|
|
259
|
-
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
260
|
-
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
261
|
-
.getRawMany();
|
|
262
|
-
|
|
263
|
-
// Step 3: Fetch action_data
|
|
264
|
-
const actionData = await this.dataSource
|
|
265
|
-
.createQueryBuilder()
|
|
266
|
-
.select([
|
|
267
|
-
'ad.action_id AS action_id',
|
|
268
|
-
'ad.is_current AS is_current',
|
|
269
|
-
'ad.is_mandatory AS is_mandatory',
|
|
270
|
-
'ad.is_done AS is_done',
|
|
271
|
-
])
|
|
272
|
-
.from('frm_wf_action_data', 'ad')
|
|
273
|
-
.where('ad.stage_id = :stageId', { stageId: stage_id })
|
|
274
|
-
.andWhere('ad.action_id IN (:...actionIds)', { actionIds })
|
|
275
|
-
.andWhere('ad.mapped_entity_id = :mapped_entity_id', { mapped_entity_id })
|
|
276
|
-
.andWhere('ad.mapped_entity_type = :mapped_entity_type', {
|
|
277
|
-
mapped_entity_type,
|
|
278
|
-
})
|
|
279
|
-
.getRawMany();
|
|
280
|
-
|
|
281
|
-
const actionIdToData = actionData.reduce((acc, row) => {
|
|
282
|
-
acc[row.action_id] = {
|
|
283
|
-
is_current: row.is_current === 'Y',
|
|
284
|
-
is_mandatory: row.is_mandatory === 1,
|
|
285
|
-
is_done: row.is_done === 1,
|
|
286
|
-
};
|
|
287
|
-
return acc;
|
|
288
|
-
}, {});
|
|
289
|
-
|
|
290
|
-
// Step 5: Enrich actions
|
|
291
|
-
const enrichedResult = actions.map((row) => {
|
|
292
|
-
const data = actionIdToData[row.action_id];
|
|
293
|
-
|
|
294
|
-
const reason_code =
|
|
295
|
-
row.action_reason_code && row.action_reason_code.trim()
|
|
296
|
-
? row.action_reason_code
|
|
297
|
-
: row.category_reason_code;
|
|
298
|
-
|
|
299
|
-
return {
|
|
300
|
-
value: row.action_id,
|
|
301
|
-
dependent_action_id: row.dependent_action_id,
|
|
302
|
-
label: row.action_name,
|
|
303
|
-
modalName: row.modalName,
|
|
304
|
-
logo: row.logo,
|
|
305
|
-
mode: row.mode,
|
|
306
|
-
name: row.action_category_name,
|
|
307
|
-
reason_code,
|
|
308
|
-
default_reason_code: row.default_reason_code,
|
|
309
|
-
is_default: row.default_value === 1,
|
|
310
|
-
is_current: data?.is_current ?? false,
|
|
311
|
-
is_done: data?.is_done ?? false,
|
|
312
|
-
is_mandatory: data?.is_mandatory ?? false,
|
|
313
|
-
};
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
// Step 6: Add fallback option
|
|
317
|
-
enrichedResult.push({
|
|
318
|
-
value: '0',
|
|
319
|
-
label: 'Generic',
|
|
320
|
-
} as any);
|
|
321
|
-
|
|
322
|
-
return enrichedResult;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
BadRequestException,
|
|
3
|
+
Inject,
|
|
4
|
+
Injectable,
|
|
5
|
+
NotFoundException,
|
|
6
|
+
} from '@nestjs/common';
|
|
7
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
8
|
+
import { DataSource, Repository } from 'typeorm';
|
|
9
|
+
import { ActionEntity } from '../entity/action.entity';
|
|
10
|
+
import { UserData } from 'src/module/user/entity/user.entity';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class ActionRepository {
|
|
14
|
+
constructor(
|
|
15
|
+
@InjectRepository(ActionEntity)
|
|
16
|
+
private readonly actionRepository: Repository<ActionEntity>,
|
|
17
|
+
private readonly dataSource: DataSource,
|
|
18
|
+
) {}
|
|
19
|
+
|
|
20
|
+
async getReasonCode(loggedInUser: UserData): Promise<any> {
|
|
21
|
+
const { organization_id } = loggedInUser;
|
|
22
|
+
const result = await this.dataSource.query(
|
|
23
|
+
`
|
|
24
|
+
SELECT name, type
|
|
25
|
+
FROM frm_list_master
|
|
26
|
+
WHERE organization_id = $1 AND source = 'master'
|
|
27
|
+
`,
|
|
28
|
+
[organization_id],
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const formatted = result.map((item: any) => ({
|
|
32
|
+
label: item.name,
|
|
33
|
+
value: item.type,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
return formatted;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async defaultReasonCode(list_type: string, loggedInUser: UserData) {
|
|
40
|
+
const { organization_id } = loggedInUser;
|
|
41
|
+
if (!list_type) {
|
|
42
|
+
throw new BadRequestException('list_type is required');
|
|
43
|
+
}
|
|
44
|
+
const result = await this.dataSource.query(
|
|
45
|
+
`
|
|
46
|
+
SELECT name, id
|
|
47
|
+
FROM frm_list_master_items
|
|
48
|
+
WHERE listtype = $1 AND organization_id = $2
|
|
49
|
+
`,
|
|
50
|
+
[list_type, organization_id],
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Format as array of key-value pairs
|
|
54
|
+
return result.map((row: any) => ({
|
|
55
|
+
label: row.name,
|
|
56
|
+
value: row.id,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async getActions(loggedInUser: UserData, stage_id: number) {
|
|
61
|
+
const { organization_id } = loggedInUser;
|
|
62
|
+
|
|
63
|
+
// Step 1: Get all action_ids for the provided stage_id
|
|
64
|
+
const stageActions = await this.dataSource.query(
|
|
65
|
+
`
|
|
66
|
+
SELECT id, action_id
|
|
67
|
+
FROM frm_wf_stage_action_mapping
|
|
68
|
+
WHERE stage_id = $1
|
|
69
|
+
`,
|
|
70
|
+
[stage_id],
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
if (!stageActions?.length) return [];
|
|
74
|
+
|
|
75
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
76
|
+
const mappingIds = stageActions.map((sa) => sa.id);
|
|
77
|
+
|
|
78
|
+
// Step 2: Get template codes with mapping IDs
|
|
79
|
+
const templateMappings = await this.dataSource.query(
|
|
80
|
+
`
|
|
81
|
+
SELECT stg_act_mapping_id, template_code
|
|
82
|
+
FROM frm_wf_action_template_mapping
|
|
83
|
+
WHERE stg_act_mapping_id IN (${mappingIds.map(() => '?').join(',')})
|
|
84
|
+
`,
|
|
85
|
+
mappingIds,
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const templateCodes = templateMappings.map((tm) => tm.template_code);
|
|
89
|
+
|
|
90
|
+
// Step 3: Fetch template names from frm_wf_comm_template
|
|
91
|
+
const templateCodeToName: Record<string, string> = {};
|
|
92
|
+
|
|
93
|
+
if (templateCodes.length > 0) {
|
|
94
|
+
const templates = await this.dataSource
|
|
95
|
+
.createQueryBuilder()
|
|
96
|
+
.select(['t.code AS code', 't.name AS name'])
|
|
97
|
+
.from('frm_wf_comm_template', 't')
|
|
98
|
+
.where('t.code IN (:...codes)', { codes: templateCodes })
|
|
99
|
+
.andWhere('t.organization_id = :orgId', { orgId: organization_id })
|
|
100
|
+
.getRawMany();
|
|
101
|
+
|
|
102
|
+
templates.forEach((tpl) => {
|
|
103
|
+
templateCodeToName[tpl.code] = tpl.name;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Step 4: Build map of mapping_id → template names
|
|
108
|
+
const mappingIdToTemplates: Record<number, string[]> = {};
|
|
109
|
+
|
|
110
|
+
for (const tm of templateMappings) {
|
|
111
|
+
const mappingId = tm.stg_act_mapping_id;
|
|
112
|
+
const name = templateCodeToName[tm.template_code];
|
|
113
|
+
if (name) {
|
|
114
|
+
if (!mappingIdToTemplates[mappingId]) {
|
|
115
|
+
mappingIdToTemplates[mappingId] = [];
|
|
116
|
+
}
|
|
117
|
+
mappingIdToTemplates[mappingId].push(name);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
|
|
122
|
+
const actionIdToTemplates: Record<number, string[]> = {};
|
|
123
|
+
|
|
124
|
+
for (const sa of stageActions) {
|
|
125
|
+
const mappingId = sa.id;
|
|
126
|
+
const templates = mappingIdToTemplates[mappingId];
|
|
127
|
+
if (templates?.length) {
|
|
128
|
+
if (!actionIdToTemplates[sa.action_id]) {
|
|
129
|
+
actionIdToTemplates[sa.action_id] = [];
|
|
130
|
+
}
|
|
131
|
+
actionIdToTemplates[sa.action_id].push(...templates);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Step 6: Fetch action details
|
|
136
|
+
const actionResults = await this.dataSource
|
|
137
|
+
.createQueryBuilder()
|
|
138
|
+
.select([
|
|
139
|
+
'a.*',
|
|
140
|
+
'ac.name AS action_category',
|
|
141
|
+
'ac.modalname AS modalname',
|
|
142
|
+
'ar.name AS action_requirement',
|
|
143
|
+
])
|
|
144
|
+
.from('frm_wf_action', 'a')
|
|
145
|
+
.leftJoin('frm_wf_action_category', 'ac', 'ac.id = a.action_category')
|
|
146
|
+
.leftJoin(
|
|
147
|
+
'frm_list_master_items',
|
|
148
|
+
'ar',
|
|
149
|
+
`ar.id = a.action_requirement AND ar.listtype = 'ACRQ' AND ar.organization_id = :orgId`,
|
|
150
|
+
{ orgId: organization_id },
|
|
151
|
+
)
|
|
152
|
+
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
153
|
+
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
154
|
+
.getRawMany();
|
|
155
|
+
|
|
156
|
+
// Step 7: Enrich result with template field
|
|
157
|
+
const enrichedResult = actionResults.map((row) => {
|
|
158
|
+
const actionId = Number(row.id); // Ensure numeric ID match
|
|
159
|
+
const templates = actionIdToTemplates[actionId] || [];
|
|
160
|
+
const uniqueTemplates = [...new Set(templates)]; // remove duplicates
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
...row,
|
|
164
|
+
template: uniqueTemplates.join(', '),
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
return enrichedResult;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async getDependentActions(
|
|
172
|
+
loggedInUser: UserData,
|
|
173
|
+
stage_id: number,
|
|
174
|
+
action_id?: number,
|
|
175
|
+
) {
|
|
176
|
+
// Step 1: Get all action_ids for the provided stage_id
|
|
177
|
+
const stageActions = await this.dataSource.query(
|
|
178
|
+
`
|
|
179
|
+
SELECT action_id
|
|
180
|
+
FROM frm_wf_stage_action_mapping
|
|
181
|
+
WHERE stage_id = $1
|
|
182
|
+
`,
|
|
183
|
+
[stage_id],
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
if (!stageActions?.length) return [];
|
|
187
|
+
|
|
188
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
189
|
+
|
|
190
|
+
// Step 2: Fetch action details except the provided action_id incase it is provided
|
|
191
|
+
const filteredActionIds = action_id
|
|
192
|
+
? actionIds.filter((id) => id != action_id)
|
|
193
|
+
: actionIds;
|
|
194
|
+
|
|
195
|
+
let actionResults;
|
|
196
|
+
|
|
197
|
+
if (filteredActionIds.length === 0) {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
actionResults = await this.dataSource
|
|
202
|
+
.createQueryBuilder()
|
|
203
|
+
.select(['a.id AS action_id', 'a.name AS action_name'])
|
|
204
|
+
.from('frm_wf_action', 'a')
|
|
205
|
+
.andWhere('a.id IN(:...actionIds)', { actionIds: filteredActionIds })
|
|
206
|
+
.getRawMany();
|
|
207
|
+
|
|
208
|
+
// Step 3: Format result
|
|
209
|
+
const enrichedResult = actionResults.map((row) => ({
|
|
210
|
+
value: row.action_id,
|
|
211
|
+
label: row.action_name,
|
|
212
|
+
}));
|
|
213
|
+
|
|
214
|
+
return enrichedResult;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
async getAction(
|
|
218
|
+
organization_id: number,
|
|
219
|
+
stage_id: number,
|
|
220
|
+
mapped_entity_id: number,
|
|
221
|
+
mapped_entity_type: string,
|
|
222
|
+
) {
|
|
223
|
+
// Step 1: Get all action mappings for the stage
|
|
224
|
+
const stageActions = await this.dataSource.query(
|
|
225
|
+
`SELECT id, action_id FROM frm_wf_stage_action_mapping WHERE stage_id = $1`,
|
|
226
|
+
[stage_id],
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
if (!stageActions?.length) {
|
|
230
|
+
return [
|
|
231
|
+
{
|
|
232
|
+
value: '0',
|
|
233
|
+
label: 'Generic',
|
|
234
|
+
},
|
|
235
|
+
];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const actionIds = stageActions.map((sa) => sa.action_id);
|
|
239
|
+
|
|
240
|
+
// Step 2: Fetch all actions with category details
|
|
241
|
+
const actions = await this.dataSource
|
|
242
|
+
.createQueryBuilder()
|
|
243
|
+
.select([
|
|
244
|
+
'a.id AS action_id',
|
|
245
|
+
'a.name AS action_name',
|
|
246
|
+
'a.reason_code AS action_reason_code',
|
|
247
|
+
'a.default_reason_code AS default_reason_code',
|
|
248
|
+
'a.default_value AS default_value',
|
|
249
|
+
'a.mode AS mode',
|
|
250
|
+
'a.action_category AS action_category_id',
|
|
251
|
+
'ac.reason_code AS category_reason_code',
|
|
252
|
+
'ac.modalName AS modalName',
|
|
253
|
+
'ac.logo AS logo',
|
|
254
|
+
'ac.name AS action_category_name',
|
|
255
|
+
'a.dependent_action_id AS dependent_action_id',
|
|
256
|
+
])
|
|
257
|
+
.from('frm_wf_action', 'a')
|
|
258
|
+
.leftJoin('frm_wf_action_category', 'ac', 'ac.id::text = a.action_category::text')
|
|
259
|
+
.where('a.organization_id = :orgId', { orgId: organization_id })
|
|
260
|
+
.andWhere('a.id IN (:...actionIds)', { actionIds })
|
|
261
|
+
.getRawMany();
|
|
262
|
+
|
|
263
|
+
// Step 3: Fetch action_data
|
|
264
|
+
const actionData = await this.dataSource
|
|
265
|
+
.createQueryBuilder()
|
|
266
|
+
.select([
|
|
267
|
+
'ad.action_id AS action_id',
|
|
268
|
+
'ad.is_current AS is_current',
|
|
269
|
+
'ad.is_mandatory AS is_mandatory',
|
|
270
|
+
'ad.is_done AS is_done',
|
|
271
|
+
])
|
|
272
|
+
.from('frm_wf_action_data', 'ad')
|
|
273
|
+
.where('ad.stage_id = :stageId', { stageId: stage_id })
|
|
274
|
+
.andWhere('ad.action_id IN (:...actionIds)', { actionIds })
|
|
275
|
+
.andWhere('ad.mapped_entity_id = :mapped_entity_id', { mapped_entity_id })
|
|
276
|
+
.andWhere('ad.mapped_entity_type = :mapped_entity_type', {
|
|
277
|
+
mapped_entity_type,
|
|
278
|
+
})
|
|
279
|
+
.getRawMany();
|
|
280
|
+
|
|
281
|
+
const actionIdToData = actionData.reduce((acc, row) => {
|
|
282
|
+
acc[row.action_id] = {
|
|
283
|
+
is_current: row.is_current === 'Y',
|
|
284
|
+
is_mandatory: row.is_mandatory === 1,
|
|
285
|
+
is_done: row.is_done === 1,
|
|
286
|
+
};
|
|
287
|
+
return acc;
|
|
288
|
+
}, {});
|
|
289
|
+
|
|
290
|
+
// Step 5: Enrich actions
|
|
291
|
+
const enrichedResult = actions.map((row) => {
|
|
292
|
+
const data = actionIdToData[row.action_id];
|
|
293
|
+
|
|
294
|
+
const reason_code =
|
|
295
|
+
row.action_reason_code && row.action_reason_code.trim()
|
|
296
|
+
? row.action_reason_code
|
|
297
|
+
: row.category_reason_code;
|
|
298
|
+
|
|
299
|
+
return {
|
|
300
|
+
value: row.action_id,
|
|
301
|
+
dependent_action_id: row.dependent_action_id,
|
|
302
|
+
label: row.action_name,
|
|
303
|
+
modalName: row.modalName,
|
|
304
|
+
logo: row.logo,
|
|
305
|
+
mode: row.mode,
|
|
306
|
+
name: row.action_category_name,
|
|
307
|
+
reason_code,
|
|
308
|
+
default_reason_code: row.default_reason_code,
|
|
309
|
+
is_default: row.default_value === 1,
|
|
310
|
+
is_current: data?.is_current ?? false,
|
|
311
|
+
is_done: data?.is_done ?? false,
|
|
312
|
+
is_mandatory: data?.is_mandatory ?? false,
|
|
313
|
+
};
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
// Step 6: Add fallback option
|
|
317
|
+
enrichedResult.push({
|
|
318
|
+
value: '0',
|
|
319
|
+
label: 'Generic',
|
|
320
|
+
} as any);
|
|
321
|
+
|
|
322
|
+
return enrichedResult;
|
|
323
|
+
}
|
|
324
|
+
}
|