rez_core 4.0.111 → 4.0.113
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/.idea/250218_nodejs_core.iml +11 -8
- package/.idea/codeStyles/Project.xml +58 -58
- package/.idea/codeStyles/codeStyleConfig.xml +4 -4
- package/.idea/inspectionProfiles/Project_Default.xml +1 -1
- 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/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 +25 -25
- 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/mapper/service/mapper.service.js +2 -2
- package/dist/module/meta/service/entity-dynamic.service.js +9 -9
- package/dist/module/meta/service/entity-list.service.js +3 -3
- package/dist/module/meta/service/entity-master.service.js +3 -3
- package/dist/module/meta/service/entity-relation.service.js +11 -11
- package/dist/module/meta/service/entity-service-impl.service.js +3 -3
- package/dist/module/meta/service/resolver.service.js +3 -3
- package/dist/module/module/repository/menu.repository.js +12 -12
- package/dist/module/notification/service/notification.service.js +9 -9
- 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 +23 -23
- package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
- package/dist/module/workflow/repository/stage.repository.js +8 -8
- package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
- package/dist/module/workflow/service/action.service.js +7 -7
- package/dist/module/workflow/service/entity-modification.service.js +6 -6
- 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 +28 -28
- package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
- package/dist/module/workflow/service/workflow-meta.service.js +35 -35
- package/dist/module/workflow/service/workflow.service.js +2 -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 +119 -119
- package/src/app.controller.ts +12 -12
- package/src/app.module.ts +52 -52
- package/src/app.service.ts +8 -8
- package/src/config/config.module.ts +18 -18
- package/src/config/database.config.ts +23 -23
- package/src/constant/global.constant.ts +67 -67
- package/src/core.module.ts +81 -81
- 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/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 +1004 -1004
- 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 +493 -493
- 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/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 +169 -169
- 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 +535 -535
- 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 +34 -34
- 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 +15 -15
- package/src/module/mapper/service/field-mapper.service.ts +266 -266
- package/src/module/mapper/service/mapper.service.ts +79 -79
- 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 +66 -66
- package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
- package/src/module/meta/controller/entity-master.controller.ts +28 -28
- 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 +89 -89
- 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 +158 -158
- package/src/module/meta/repository/app-master.repository.ts +20 -20
- package/src/module/meta/repository/attribute-master.repository.ts +118 -118
- package/src/module/meta/repository/entity-master.repository.ts +69 -69
- 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 +126 -126
- package/src/module/meta/service/common.service.ts +9 -9
- package/src/module/meta/service/entity-dynamic.service.ts +819 -819
- package/src/module/meta/service/entity-list.service.ts +205 -205
- package/src/module/meta/service/entity-master.service.ts +169 -169
- package/src/module/meta/service/entity-realation-data.service.ts +9 -9
- package/src/module/meta/service/entity-relation.service.ts +69 -69
- 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 +193 -193
- package/src/module/meta/service/preference.service.ts +16 -16
- package/src/module/meta/service/resolver.service.ts +267 -267
- 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 +184 -184
- 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 +209 -209
- 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 +163 -163
- package/src/module/notification/service/otp.service.ts +132 -132
- 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 +197 -197
- 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 +290 -290
- 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 +365 -365
- 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 +50 -50
- 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 +333 -333
- package/src/module/workflow/repository/action.repository.ts +323 -323
- 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 +176 -176
- package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
- package/src/module/workflow/repository/stage.repository.ts +172 -172
- package/src/module/workflow/repository/task.repository.ts +127 -127
- 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 +106 -106
- 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 +67 -67
- package/src/module/workflow/service/form-master.service.ts +35 -35
- package/src/module/workflow/service/populate-workflow.service.ts +303 -303
- package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
- package/src/module/workflow/service/stage-group.service.ts +319 -319
- package/src/module/workflow/service/stage.service.ts +199 -199
- package/src/module/workflow/service/task.service.ts +560 -560
- package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
- package/src/module/workflow/service/workflow-meta.service.ts +640 -640
- package/src/module/workflow/service/workflow.service.ts +205 -205
- package/src/module/workflow/workflow.module.ts +176 -176
- package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
- package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
- package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
- 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/workflow-automation-engine.service.ts +214 -214
- package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
- package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
- package/src/resources/dev.properties.yaml +30 -30
- 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 +126 -126
- 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 +34 -34
- 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 +25 -25
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +24 -24
- package/.claude/settings.local.json +0 -26
- 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/misc.xml +0 -6
- package/server.log +0 -850
|
@@ -1,333 +1,333 @@
|
|
|
1
|
-
import { BadRequestException, Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
|
-
import { ActionDataEntity } from '../entity/action-data.entity';
|
|
4
|
-
import { DataSource, LessThan, Repository } from 'typeorm';
|
|
5
|
-
import { UserData } from 'src/module/user/entity/user.entity';
|
|
6
|
-
import { TaskDataEntity } from '../entity/task-data.entity';
|
|
7
|
-
import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
|
|
8
|
-
import { FORM_STATUS_TO_BE_SENT } from 'src/constant/global.constant';
|
|
9
|
-
import { ConfigService } from '@nestjs/config';
|
|
10
|
-
import axios from 'axios';
|
|
11
|
-
import { WorkflowAutomationEngineService } from 'src/module/workflow-automation/service/workflow-automation-engine.service';
|
|
12
|
-
|
|
13
|
-
@Injectable()
|
|
14
|
-
export class ActionDataRepository extends EntityServiceImpl {
|
|
15
|
-
constructor(
|
|
16
|
-
@InjectRepository(ActionDataEntity)
|
|
17
|
-
private readonly actionDataRepo: Repository<ActionDataEntity>,
|
|
18
|
-
private readonly dataSource: DataSource,
|
|
19
|
-
// @InjectRepository(FormDataEntity)
|
|
20
|
-
// private readonly formRepo: Repository<FormDataEntity>,
|
|
21
|
-
@InjectRepository(TaskDataEntity)
|
|
22
|
-
private readonly TaskRepository: Repository<TaskDataEntity>,
|
|
23
|
-
private readonly configService: ConfigService,
|
|
24
|
-
private readonly workflowAutomationEngineService: WorkflowAutomationEngineService,
|
|
25
|
-
) {
|
|
26
|
-
super();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async saveActionData(
|
|
30
|
-
action: any,
|
|
31
|
-
loggedInUser: UserData,
|
|
32
|
-
mapped_entity_id,
|
|
33
|
-
mapped_entity_type,
|
|
34
|
-
): Promise<any> {
|
|
35
|
-
if (!action?.length) return;
|
|
36
|
-
|
|
37
|
-
// Find the action with the lowest sequence
|
|
38
|
-
const minSequence = Math.min(...action.map((a) => a.sequence));
|
|
39
|
-
|
|
40
|
-
if (action.length > 0) {
|
|
41
|
-
for (const act of action) {
|
|
42
|
-
const is_mandatory = await this.dataSource.query(
|
|
43
|
-
`SELECT code FROM frm_list_master_items WHERE id = ? and organization_id = ? LIMIT 1;`,
|
|
44
|
-
[act.action_requirement, loggedInUser.organization_id],
|
|
45
|
-
);
|
|
46
|
-
const isFirst = act.sequence == minSequence;
|
|
47
|
-
const actionData = this.actionDataRepo.create({
|
|
48
|
-
stage_id: act.stage_id,
|
|
49
|
-
user_id: loggedInUser.id,
|
|
50
|
-
action_id: act.id,
|
|
51
|
-
sequence: act.sequence,
|
|
52
|
-
name: act.name,
|
|
53
|
-
organization_id: loggedInUser.organization_id,
|
|
54
|
-
mapped_entity_id,
|
|
55
|
-
mapped_entity_type,
|
|
56
|
-
is_current: isFirst ? 'Y' : null,
|
|
57
|
-
start_time: isFirst ? new Date() : null,
|
|
58
|
-
is_mandatory: is_mandatory[0]?.code === 'mandatory' ? true : false,
|
|
59
|
-
category: act?.action_category_code,
|
|
60
|
-
} as ActionDataEntity);
|
|
61
|
-
await this.actionDataRepo.save(actionData);
|
|
62
|
-
|
|
63
|
-
// SEND ANY FORM
|
|
64
|
-
// if the action_category_code is 'SDFM', create a entry in crm_lead_form table
|
|
65
|
-
if (act?.action_category_code === 'SDFM') {
|
|
66
|
-
const dynamicFormURL = await this.generateFormURL(
|
|
67
|
-
mapped_entity_type,
|
|
68
|
-
mapped_entity_id,
|
|
69
|
-
act.form_id,
|
|
70
|
-
loggedInUser,
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const viewMaster = await super.getEntityData(
|
|
74
|
-
'VMS',
|
|
75
|
-
Number(act.form_id),
|
|
76
|
-
loggedInUser,
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const now = new Date();
|
|
80
|
-
const istOffset = 5.5 * 60; // IST is UTC +5:30 in minutes
|
|
81
|
-
const istDate = new Date(now.getTime() + istOffset * 60 * 1000);
|
|
82
|
-
|
|
83
|
-
const data = {
|
|
84
|
-
entity_type: 'LFRM',
|
|
85
|
-
name: viewMaster?.name,
|
|
86
|
-
stage_id: act.stage_id,
|
|
87
|
-
mapped_entity_type,
|
|
88
|
-
mapped_entity_id,
|
|
89
|
-
view_id: act.form_id,
|
|
90
|
-
form_url: dynamicFormURL,
|
|
91
|
-
status: FORM_STATUS_TO_BE_SENT,
|
|
92
|
-
action_id: act.id,
|
|
93
|
-
created_date: istDate,
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const createdEntity = await super.createEntity(
|
|
97
|
-
data as any,
|
|
98
|
-
loggedInUser,
|
|
99
|
-
);
|
|
100
|
-
// THEN INSERT SDFM IN RELATION TASK TABLE
|
|
101
|
-
|
|
102
|
-
let relationData = await this.dataSource.query(
|
|
103
|
-
`SELECT * FROM frm_entity_relation WHERE source_entity_type = ? AND target_entity_type = ?`,
|
|
104
|
-
[createdEntity.mapped_entity_type, createdEntity.entity_type],
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
if (relationData) {
|
|
108
|
-
await this.dataSource.query(
|
|
109
|
-
`INSERT INTO frm_entity_relation_data (organization_id, source_entity_id, source_entity_type, target_entity_id, target_entity_type, relation_type) VALUES (?, ?, ?, ?, ?,?)`,
|
|
110
|
-
[
|
|
111
|
-
loggedInUser.organization_id,
|
|
112
|
-
createdEntity.mapped_entity_id,
|
|
113
|
-
createdEntity.mapped_entity_type,
|
|
114
|
-
createdEntity.id,
|
|
115
|
-
createdEntity.entity_type,
|
|
116
|
-
relationData[0]?.relation_type,
|
|
117
|
-
],
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
await this.workflowAutomationEngineService.handleEntityEvent(
|
|
122
|
-
createdEntity.entity_type,
|
|
123
|
-
'CREATE',
|
|
124
|
-
createdEntity,
|
|
125
|
-
loggedInUser,
|
|
126
|
-
null,
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async updateActionStatus(
|
|
134
|
-
loggedInUser: UserData,
|
|
135
|
-
mapped_entity_type: string,
|
|
136
|
-
mapped_entity_id: number,
|
|
137
|
-
stage_id: number,
|
|
138
|
-
action_id: number,
|
|
139
|
-
): Promise<any> {
|
|
140
|
-
const actionData = await this.actionDataRepo.findOne({
|
|
141
|
-
where: {
|
|
142
|
-
mapped_entity_type,
|
|
143
|
-
mapped_entity_id,
|
|
144
|
-
stage_id,
|
|
145
|
-
action_id,
|
|
146
|
-
},
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
if (!actionData) return;
|
|
150
|
-
|
|
151
|
-
actionData.end_time = new Date();
|
|
152
|
-
actionData.modified_by = loggedInUser.id;
|
|
153
|
-
actionData.modified_date = new Date();
|
|
154
|
-
actionData.is_done = true;
|
|
155
|
-
actionData.is_current = 'N'; // Mark as not current
|
|
156
|
-
|
|
157
|
-
// Save the updated action
|
|
158
|
-
await this.actionDataRepo.update(actionData.id, actionData);
|
|
159
|
-
|
|
160
|
-
// NOW, ACTIVATE THE NEXT ACTION (moveNextActionData logic here)
|
|
161
|
-
// Find next sequence action for the same entity/stage
|
|
162
|
-
const allActionData = await this.actionDataRepo.find({
|
|
163
|
-
where: { mapped_entity_type, mapped_entity_id, stage_id },
|
|
164
|
-
order: { sequence: 'ASC' },
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// Find the action with the next higher sequence number
|
|
168
|
-
const nextAction = allActionData.find(
|
|
169
|
-
(a) => a.sequence > actionData.sequence,
|
|
170
|
-
);
|
|
171
|
-
if (nextAction && nextAction.is_current !== 'Y') {
|
|
172
|
-
nextAction.is_current = 'Y';
|
|
173
|
-
nextAction.start_time = new Date();
|
|
174
|
-
nextAction.modified_by = loggedInUser.id;
|
|
175
|
-
nextAction.modified_date = new Date();
|
|
176
|
-
await this.actionDataRepo.update(nextAction.id, nextAction);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Optionally return both for audit
|
|
180
|
-
return { finished: actionData, activated: nextAction ?? null };
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
async resubmitAction(
|
|
184
|
-
organization_id: number,
|
|
185
|
-
mapped_entity_type: string,
|
|
186
|
-
mapped_entity_id: number,
|
|
187
|
-
stage_id: number,
|
|
188
|
-
action_id: number,
|
|
189
|
-
) {
|
|
190
|
-
// Get the current active action
|
|
191
|
-
const currentAction = await this.actionDataRepo.findOne({
|
|
192
|
-
where: {
|
|
193
|
-
organization_id,
|
|
194
|
-
stage_id,
|
|
195
|
-
mapped_entity_id,
|
|
196
|
-
mapped_entity_type,
|
|
197
|
-
action_id,
|
|
198
|
-
is_current: 'Y',
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
if (!currentAction) {
|
|
203
|
-
// skip
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Find the immediate previous action in the sequence
|
|
208
|
-
const previousAction = await this.actionDataRepo.findOne({
|
|
209
|
-
where: {
|
|
210
|
-
organization_id,
|
|
211
|
-
stage_id,
|
|
212
|
-
mapped_entity_id,
|
|
213
|
-
mapped_entity_type,
|
|
214
|
-
sequence: LessThan(currentAction.sequence),
|
|
215
|
-
},
|
|
216
|
-
order: { sequence: 'DESC' }, // immediate previous
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
if (!previousAction) {
|
|
220
|
-
// no previous action means we cannot resubmit
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Unset current action
|
|
225
|
-
currentAction.is_current = null as any;
|
|
226
|
-
currentAction.modified_date = new Date();
|
|
227
|
-
currentAction.modified_by = organization_id;
|
|
228
|
-
currentAction.start_time = null as any;
|
|
229
|
-
currentAction.resubmit_count = (currentAction.resubmit_count ?? 0) + 1;
|
|
230
|
-
|
|
231
|
-
await this.actionDataRepo.update(currentAction.id, currentAction);
|
|
232
|
-
|
|
233
|
-
// Mark previous action as current again
|
|
234
|
-
previousAction.is_current = 'Y';
|
|
235
|
-
previousAction.modified_date = new Date();
|
|
236
|
-
previousAction.modified_by = organization_id;
|
|
237
|
-
previousAction.end_time = null as any; // Reset end time
|
|
238
|
-
previousAction.is_done = false;
|
|
239
|
-
await this.actionDataRepo.update(previousAction.id, previousAction);
|
|
240
|
-
|
|
241
|
-
// reverse the status of tasks for the previous action
|
|
242
|
-
const tasksForPrevAction = await this.TaskRepository.find({
|
|
243
|
-
where: {
|
|
244
|
-
action_id: String(previousAction.action_id),
|
|
245
|
-
mapped_entity_type,
|
|
246
|
-
mapped_entity_id,
|
|
247
|
-
stage_id: String(previousAction.stage_id),
|
|
248
|
-
is_done: true,
|
|
249
|
-
},
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
if (tasksForPrevAction.length > 0) {
|
|
253
|
-
for (const task of tasksForPrevAction) {
|
|
254
|
-
task.modified_date = new Date();
|
|
255
|
-
task.is_done = false;
|
|
256
|
-
|
|
257
|
-
// Reset status (optional: set to something like 'pending' if needed)
|
|
258
|
-
const pendingListMasterItemId = await this.dataSource.query(
|
|
259
|
-
`SELECT id FROM frm_list_master_items WHERE code = 'in_progress' AND organization_id = ? AND listtype = 'TKST' LIMIT 1;`,
|
|
260
|
-
[organization_id],
|
|
261
|
-
);
|
|
262
|
-
task.status = pendingListMasterItemId[0]?.id ?? task.status;
|
|
263
|
-
|
|
264
|
-
await this.TaskRepository.update(task.id, task);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return {
|
|
269
|
-
message: 'Action resubmitted successfully',
|
|
270
|
-
revertedTo: previousAction,
|
|
271
|
-
updated: currentAction,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// method to dynamically generate form URL
|
|
276
|
-
async generateFormURL(
|
|
277
|
-
mapped_entity_type: string,
|
|
278
|
-
mapped_entity_id: number,
|
|
279
|
-
view_id: number,
|
|
280
|
-
loggedInUser: any,
|
|
281
|
-
) {
|
|
282
|
-
let organizationData;
|
|
283
|
-
|
|
284
|
-
try {
|
|
285
|
-
const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
|
|
286
|
-
|
|
287
|
-
// Prepare query params
|
|
288
|
-
const queryParams = new URLSearchParams({
|
|
289
|
-
loggedInUser: JSON.stringify(loggedInUser),
|
|
290
|
-
}).toString();
|
|
291
|
-
|
|
292
|
-
const { level_id } = loggedInUser;
|
|
293
|
-
|
|
294
|
-
const url = `${baseUrl}/organization/public/${level_id}?entity_type=ORGP&${queryParams}`;
|
|
295
|
-
|
|
296
|
-
const response = await axios.get(url);
|
|
297
|
-
|
|
298
|
-
organizationData = response.data;
|
|
299
|
-
|
|
300
|
-
// The API response is likely a JSON object, not an array
|
|
301
|
-
} catch (error) {
|
|
302
|
-
console.error('Internal Entity API call failed:', error.message);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
const org_slug = organizationData[0]?.slug;
|
|
306
|
-
|
|
307
|
-
// fetch required var from config or env
|
|
308
|
-
const profile = this.configService.get('PROFILE');
|
|
309
|
-
const baseUrl = this.configService.get('BASE_URL');
|
|
310
|
-
const domainUrl = this.configService.get('DOMAIN_URL');
|
|
311
|
-
|
|
312
|
-
if (!profile || !baseUrl || !domainUrl) {
|
|
313
|
-
throw new BadRequestException(
|
|
314
|
-
`Configuration variable missing for form URL generation`,
|
|
315
|
-
);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
let finalBaseUrl: string;
|
|
319
|
-
|
|
320
|
-
if (profile === 'DEV' || profile === 'STAGING') {
|
|
321
|
-
finalBaseUrl = baseUrl;
|
|
322
|
-
} else if (profile === 'UAT' || profile === 'PREPROD') {
|
|
323
|
-
// fetch org_slug from DB if needed
|
|
324
|
-
finalBaseUrl = `https://${org_slug}.${domainUrl}`;
|
|
325
|
-
} else {
|
|
326
|
-
finalBaseUrl = baseUrl;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
const formURL = `${finalBaseUrl}/form/${mapped_entity_type}/${mapped_entity_id}/${view_id}`;
|
|
330
|
-
|
|
331
|
-
return formURL;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
1
|
+
import { BadRequestException, Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
|
+
import { ActionDataEntity } from '../entity/action-data.entity';
|
|
4
|
+
import { DataSource, LessThan, Repository } from 'typeorm';
|
|
5
|
+
import { UserData } from 'src/module/user/entity/user.entity';
|
|
6
|
+
import { TaskDataEntity } from '../entity/task-data.entity';
|
|
7
|
+
import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
|
|
8
|
+
import { FORM_STATUS_TO_BE_SENT } from 'src/constant/global.constant';
|
|
9
|
+
import { ConfigService } from '@nestjs/config';
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import { WorkflowAutomationEngineService } from 'src/module/workflow-automation/service/workflow-automation-engine.service';
|
|
12
|
+
|
|
13
|
+
@Injectable()
|
|
14
|
+
export class ActionDataRepository extends EntityServiceImpl {
|
|
15
|
+
constructor(
|
|
16
|
+
@InjectRepository(ActionDataEntity)
|
|
17
|
+
private readonly actionDataRepo: Repository<ActionDataEntity>,
|
|
18
|
+
private readonly dataSource: DataSource,
|
|
19
|
+
// @InjectRepository(FormDataEntity)
|
|
20
|
+
// private readonly formRepo: Repository<FormDataEntity>,
|
|
21
|
+
@InjectRepository(TaskDataEntity)
|
|
22
|
+
private readonly TaskRepository: Repository<TaskDataEntity>,
|
|
23
|
+
private readonly configService: ConfigService,
|
|
24
|
+
private readonly workflowAutomationEngineService: WorkflowAutomationEngineService,
|
|
25
|
+
) {
|
|
26
|
+
super();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async saveActionData(
|
|
30
|
+
action: any,
|
|
31
|
+
loggedInUser: UserData,
|
|
32
|
+
mapped_entity_id,
|
|
33
|
+
mapped_entity_type,
|
|
34
|
+
): Promise<any> {
|
|
35
|
+
if (!action?.length) return;
|
|
36
|
+
|
|
37
|
+
// Find the action with the lowest sequence
|
|
38
|
+
const minSequence = Math.min(...action.map((a) => a.sequence));
|
|
39
|
+
|
|
40
|
+
if (action.length > 0) {
|
|
41
|
+
for (const act of action) {
|
|
42
|
+
const is_mandatory = await this.dataSource.query(
|
|
43
|
+
`SELECT code FROM frm_list_master_items WHERE id = ? and organization_id = ? LIMIT 1;`,
|
|
44
|
+
[act.action_requirement, loggedInUser.organization_id],
|
|
45
|
+
);
|
|
46
|
+
const isFirst = act.sequence == minSequence;
|
|
47
|
+
const actionData = this.actionDataRepo.create({
|
|
48
|
+
stage_id: act.stage_id,
|
|
49
|
+
user_id: loggedInUser.id,
|
|
50
|
+
action_id: act.id,
|
|
51
|
+
sequence: act.sequence,
|
|
52
|
+
name: act.name,
|
|
53
|
+
organization_id: loggedInUser.organization_id,
|
|
54
|
+
mapped_entity_id,
|
|
55
|
+
mapped_entity_type,
|
|
56
|
+
is_current: isFirst ? 'Y' : null,
|
|
57
|
+
start_time: isFirst ? new Date() : null,
|
|
58
|
+
is_mandatory: is_mandatory[0]?.code === 'mandatory' ? true : false,
|
|
59
|
+
category: act?.action_category_code,
|
|
60
|
+
} as ActionDataEntity);
|
|
61
|
+
await this.actionDataRepo.save(actionData);
|
|
62
|
+
|
|
63
|
+
// SEND ANY FORM
|
|
64
|
+
// if the action_category_code is 'SDFM', create a entry in crm_lead_form table
|
|
65
|
+
if (act?.action_category_code === 'SDFM') {
|
|
66
|
+
const dynamicFormURL = await this.generateFormURL(
|
|
67
|
+
mapped_entity_type,
|
|
68
|
+
mapped_entity_id,
|
|
69
|
+
act.form_id,
|
|
70
|
+
loggedInUser,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const viewMaster = await super.getEntityData(
|
|
74
|
+
'VMS',
|
|
75
|
+
Number(act.form_id),
|
|
76
|
+
loggedInUser,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const now = new Date();
|
|
80
|
+
const istOffset = 5.5 * 60; // IST is UTC +5:30 in minutes
|
|
81
|
+
const istDate = new Date(now.getTime() + istOffset * 60 * 1000);
|
|
82
|
+
|
|
83
|
+
const data = {
|
|
84
|
+
entity_type: 'LFRM',
|
|
85
|
+
name: viewMaster?.name,
|
|
86
|
+
stage_id: act.stage_id,
|
|
87
|
+
mapped_entity_type,
|
|
88
|
+
mapped_entity_id,
|
|
89
|
+
view_id: act.form_id,
|
|
90
|
+
form_url: dynamicFormURL,
|
|
91
|
+
status: FORM_STATUS_TO_BE_SENT,
|
|
92
|
+
action_id: act.id,
|
|
93
|
+
created_date: istDate,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const createdEntity = await super.createEntity(
|
|
97
|
+
data as any,
|
|
98
|
+
loggedInUser,
|
|
99
|
+
);
|
|
100
|
+
// THEN INSERT SDFM IN RELATION TASK TABLE
|
|
101
|
+
|
|
102
|
+
let relationData = await this.dataSource.query(
|
|
103
|
+
`SELECT * FROM frm_entity_relation WHERE source_entity_type = ? AND target_entity_type = ?`,
|
|
104
|
+
[createdEntity.mapped_entity_type, createdEntity.entity_type],
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
if (relationData) {
|
|
108
|
+
await this.dataSource.query(
|
|
109
|
+
`INSERT INTO frm_entity_relation_data (organization_id, source_entity_id, source_entity_type, target_entity_id, target_entity_type, relation_type) VALUES (?, ?, ?, ?, ?,?)`,
|
|
110
|
+
[
|
|
111
|
+
loggedInUser.organization_id,
|
|
112
|
+
createdEntity.mapped_entity_id,
|
|
113
|
+
createdEntity.mapped_entity_type,
|
|
114
|
+
createdEntity.id,
|
|
115
|
+
createdEntity.entity_type,
|
|
116
|
+
relationData[0]?.relation_type,
|
|
117
|
+
],
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
await this.workflowAutomationEngineService.handleEntityEvent(
|
|
122
|
+
createdEntity.entity_type,
|
|
123
|
+
'CREATE',
|
|
124
|
+
createdEntity,
|
|
125
|
+
loggedInUser,
|
|
126
|
+
null,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async updateActionStatus(
|
|
134
|
+
loggedInUser: UserData,
|
|
135
|
+
mapped_entity_type: string,
|
|
136
|
+
mapped_entity_id: number,
|
|
137
|
+
stage_id: number,
|
|
138
|
+
action_id: number,
|
|
139
|
+
): Promise<any> {
|
|
140
|
+
const actionData = await this.actionDataRepo.findOne({
|
|
141
|
+
where: {
|
|
142
|
+
mapped_entity_type,
|
|
143
|
+
mapped_entity_id,
|
|
144
|
+
stage_id,
|
|
145
|
+
action_id,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (!actionData) return;
|
|
150
|
+
|
|
151
|
+
actionData.end_time = new Date();
|
|
152
|
+
actionData.modified_by = loggedInUser.id;
|
|
153
|
+
actionData.modified_date = new Date();
|
|
154
|
+
actionData.is_done = true;
|
|
155
|
+
actionData.is_current = 'N'; // Mark as not current
|
|
156
|
+
|
|
157
|
+
// Save the updated action
|
|
158
|
+
await this.actionDataRepo.update(actionData.id, actionData);
|
|
159
|
+
|
|
160
|
+
// NOW, ACTIVATE THE NEXT ACTION (moveNextActionData logic here)
|
|
161
|
+
// Find next sequence action for the same entity/stage
|
|
162
|
+
const allActionData = await this.actionDataRepo.find({
|
|
163
|
+
where: { mapped_entity_type, mapped_entity_id, stage_id },
|
|
164
|
+
order: { sequence: 'ASC' },
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Find the action with the next higher sequence number
|
|
168
|
+
const nextAction = allActionData.find(
|
|
169
|
+
(a) => a.sequence > actionData.sequence,
|
|
170
|
+
);
|
|
171
|
+
if (nextAction && nextAction.is_current !== 'Y') {
|
|
172
|
+
nextAction.is_current = 'Y';
|
|
173
|
+
nextAction.start_time = new Date();
|
|
174
|
+
nextAction.modified_by = loggedInUser.id;
|
|
175
|
+
nextAction.modified_date = new Date();
|
|
176
|
+
await this.actionDataRepo.update(nextAction.id, nextAction);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Optionally return both for audit
|
|
180
|
+
return { finished: actionData, activated: nextAction ?? null };
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async resubmitAction(
|
|
184
|
+
organization_id: number,
|
|
185
|
+
mapped_entity_type: string,
|
|
186
|
+
mapped_entity_id: number,
|
|
187
|
+
stage_id: number,
|
|
188
|
+
action_id: number,
|
|
189
|
+
) {
|
|
190
|
+
// Get the current active action
|
|
191
|
+
const currentAction = await this.actionDataRepo.findOne({
|
|
192
|
+
where: {
|
|
193
|
+
organization_id,
|
|
194
|
+
stage_id,
|
|
195
|
+
mapped_entity_id,
|
|
196
|
+
mapped_entity_type,
|
|
197
|
+
action_id,
|
|
198
|
+
is_current: 'Y',
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
if (!currentAction) {
|
|
203
|
+
// skip
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Find the immediate previous action in the sequence
|
|
208
|
+
const previousAction = await this.actionDataRepo.findOne({
|
|
209
|
+
where: {
|
|
210
|
+
organization_id,
|
|
211
|
+
stage_id,
|
|
212
|
+
mapped_entity_id,
|
|
213
|
+
mapped_entity_type,
|
|
214
|
+
sequence: LessThan(currentAction.sequence),
|
|
215
|
+
},
|
|
216
|
+
order: { sequence: 'DESC' }, // immediate previous
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
if (!previousAction) {
|
|
220
|
+
// no previous action means we cannot resubmit
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Unset current action
|
|
225
|
+
currentAction.is_current = null as any;
|
|
226
|
+
currentAction.modified_date = new Date();
|
|
227
|
+
currentAction.modified_by = organization_id;
|
|
228
|
+
currentAction.start_time = null as any;
|
|
229
|
+
currentAction.resubmit_count = (currentAction.resubmit_count ?? 0) + 1;
|
|
230
|
+
|
|
231
|
+
await this.actionDataRepo.update(currentAction.id, currentAction);
|
|
232
|
+
|
|
233
|
+
// Mark previous action as current again
|
|
234
|
+
previousAction.is_current = 'Y';
|
|
235
|
+
previousAction.modified_date = new Date();
|
|
236
|
+
previousAction.modified_by = organization_id;
|
|
237
|
+
previousAction.end_time = null as any; // Reset end time
|
|
238
|
+
previousAction.is_done = false;
|
|
239
|
+
await this.actionDataRepo.update(previousAction.id, previousAction);
|
|
240
|
+
|
|
241
|
+
// reverse the status of tasks for the previous action
|
|
242
|
+
const tasksForPrevAction = await this.TaskRepository.find({
|
|
243
|
+
where: {
|
|
244
|
+
action_id: String(previousAction.action_id),
|
|
245
|
+
mapped_entity_type,
|
|
246
|
+
mapped_entity_id,
|
|
247
|
+
stage_id: String(previousAction.stage_id),
|
|
248
|
+
is_done: true,
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
if (tasksForPrevAction.length > 0) {
|
|
253
|
+
for (const task of tasksForPrevAction) {
|
|
254
|
+
task.modified_date = new Date();
|
|
255
|
+
task.is_done = false;
|
|
256
|
+
|
|
257
|
+
// Reset status (optional: set to something like 'pending' if needed)
|
|
258
|
+
const pendingListMasterItemId = await this.dataSource.query(
|
|
259
|
+
`SELECT id FROM frm_list_master_items WHERE code = 'in_progress' AND organization_id = ? AND listtype = 'TKST' LIMIT 1;`,
|
|
260
|
+
[organization_id],
|
|
261
|
+
);
|
|
262
|
+
task.status = pendingListMasterItemId[0]?.id ?? task.status;
|
|
263
|
+
|
|
264
|
+
await this.TaskRepository.update(task.id, task);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
message: 'Action resubmitted successfully',
|
|
270
|
+
revertedTo: previousAction,
|
|
271
|
+
updated: currentAction,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// method to dynamically generate form URL
|
|
276
|
+
async generateFormURL(
|
|
277
|
+
mapped_entity_type: string,
|
|
278
|
+
mapped_entity_id: number,
|
|
279
|
+
view_id: number,
|
|
280
|
+
loggedInUser: any,
|
|
281
|
+
) {
|
|
282
|
+
let organizationData;
|
|
283
|
+
|
|
284
|
+
try {
|
|
285
|
+
const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
|
|
286
|
+
|
|
287
|
+
// Prepare query params
|
|
288
|
+
const queryParams = new URLSearchParams({
|
|
289
|
+
loggedInUser: JSON.stringify(loggedInUser),
|
|
290
|
+
}).toString();
|
|
291
|
+
|
|
292
|
+
const { level_id } = loggedInUser;
|
|
293
|
+
|
|
294
|
+
const url = `${baseUrl}/organization/public/${level_id}?entity_type=ORGP&${queryParams}`;
|
|
295
|
+
|
|
296
|
+
const response = await axios.get(url);
|
|
297
|
+
|
|
298
|
+
organizationData = response.data;
|
|
299
|
+
|
|
300
|
+
// The API response is likely a JSON object, not an array
|
|
301
|
+
} catch (error) {
|
|
302
|
+
console.error('Internal Entity API call failed:', error.message);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const org_slug = organizationData[0]?.slug;
|
|
306
|
+
|
|
307
|
+
// fetch required var from config or env
|
|
308
|
+
const profile = this.configService.get('PROFILE');
|
|
309
|
+
const baseUrl = this.configService.get('BASE_URL');
|
|
310
|
+
const domainUrl = this.configService.get('DOMAIN_URL');
|
|
311
|
+
|
|
312
|
+
if (!profile || !baseUrl || !domainUrl) {
|
|
313
|
+
throw new BadRequestException(
|
|
314
|
+
`Configuration variable missing for form URL generation`,
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
let finalBaseUrl: string;
|
|
319
|
+
|
|
320
|
+
if (profile === 'DEV' || profile === 'STAGING') {
|
|
321
|
+
finalBaseUrl = baseUrl;
|
|
322
|
+
} else if (profile === 'UAT' || profile === 'PREPROD') {
|
|
323
|
+
// fetch org_slug from DB if needed
|
|
324
|
+
finalBaseUrl = `https://${org_slug}.${domainUrl}`;
|
|
325
|
+
} else {
|
|
326
|
+
finalBaseUrl = baseUrl;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const formURL = `${finalBaseUrl}/form/${mapped_entity_type}/${mapped_entity_id}/${view_id}`;
|
|
330
|
+
|
|
331
|
+
return formURL;
|
|
332
|
+
}
|
|
333
|
+
}
|