@platform-modules/civil-aviation-authority 2.3.259 → 2.3.260

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.
@@ -252,6 +252,7 @@ const MediaPublicationsChatModel_1 = require("./models/MediaPublicationsChatMode
252
252
  const MediaPublicationsWorkflowModel_1 = require("./models/MediaPublicationsWorkflowModel");
253
253
  const SlaRequestModel_1 = require("./models/SlaRequestModel");
254
254
  const SlaMyRequestsViewModel_1 = require("./models/SlaMyRequestsViewModel");
255
+ const SlaApprovalsViewModel_1 = require("./models/SlaApprovalsViewModel");
255
256
  const ServiceSlaApprovalModel_1 = require("./models/ServiceSlaApprovalModel");
256
257
  const SlaConfigModel_1 = require("./models/SlaConfigModel");
257
258
  exports.AppDataSource = new typeorm_1.DataSource({
@@ -510,6 +511,7 @@ exports.AppDataSource = new typeorm_1.DataSource({
510
511
  MediaPublicationsWorkflowModel_1.MediaPublicationsWorkFlow,
511
512
  SlaRequestModel_1.SlaRequest,
512
513
  SlaMyRequestsViewModel_1.SlaMyRequestsView,
514
+ SlaApprovalsViewModel_1.SlaApprovalsView,
513
515
  ServiceSlaApprovalModel_1.ServiceSlaApproval,
514
516
  SlaConfigModel_1.SlaConfig,
515
517
  ],
package/dist/index.d.ts CHANGED
@@ -402,6 +402,7 @@ export * from './models/ContractServiceRequestModel';
402
402
  export * from './models/SlaConfigModel';
403
403
  export * from './models/SlaRequestModel';
404
404
  export * from './models/SlaMyRequestsViewModel';
405
+ export * from './models/SlaApprovalsViewModel';
405
406
  export * from './models/ServiceSlaApprovalModel';
406
407
  export * from './sla/sla-table-sync.service';
407
408
  export * from './sla/sla-approval-mirror';
package/dist/index.js CHANGED
@@ -591,6 +591,7 @@ __exportStar(require("./models/ContractServiceRequestModel"), exports);
591
591
  __exportStar(require("./models/SlaConfigModel"), exports);
592
592
  __exportStar(require("./models/SlaRequestModel"), exports);
593
593
  __exportStar(require("./models/SlaMyRequestsViewModel"), exports);
594
+ __exportStar(require("./models/SlaApprovalsViewModel"), exports);
594
595
  __exportStar(require("./models/ServiceSlaApprovalModel"), exports);
595
596
  __exportStar(require("./sla/sla-table-sync.service"), exports);
596
597
  __exportStar(require("./sla/sla-approval-mirror"), exports);
@@ -1,26 +1,38 @@
1
+ /** Reuse the same `request_obj` key exclusions as my-requests. */
2
+ export declare const SLA_APPROVALS_REQUEST_OBJ_EXCLUDED_KEYS: readonly ["id", "status", "role_id", "user_id", "createdBy", "created_at", "updated_by", "updated_at", "req_user_department_id", "workflow_execution_id", "department_id", "req_user_section_id", "service_type_id", "service_type", "created_by", "service_id", "sub_service_id", "attachments", "is_deleted", "sla_request", "sla_request_id"];
3
+ /**
4
+ * Read-only view for SLA approvals listings (TypeORM).
5
+ * Approver matching (`sla_approval_matches_user` semantics) is applied in Reports_Service queries.
6
+ */
1
7
  export declare class SlaApprovalsView {
2
8
  sla_approval_id: number;
3
9
  source_approval_id: number;
4
10
  request_id: number;
5
- service_id: number | null;
6
- sub_service_id: number | null;
11
+ service_id: number;
12
+ sub_service_id: number;
7
13
  service_name: string;
8
14
  sub_service_name: string;
15
+ department_id: number;
16
+ department_name: string;
17
+ section_id: number;
18
+ section_name: string;
19
+ role_id: number;
20
+ role_name: string;
9
21
  approval_status: string;
10
22
  request_status: string;
11
23
  level: number;
12
- approver_user_id: number | null;
24
+ approver_user_id: number;
13
25
  approver_user_name: string;
14
- delegate_user_id: number | null;
26
+ delegate_user_id: number;
15
27
  delegate_user_name: string;
16
- approved_by: number | null;
28
+ approved_by: number;
17
29
  approved_by_name: string;
18
- comment: string | null;
30
+ comment: string;
31
+ created_at: Date;
32
+ updated_at: Date;
19
33
  requester_user_id: number;
20
34
  requester_name: string;
21
- department_name: string;
22
- section_name: string;
35
+ req_user_department_name: string;
36
+ req_user_section_name: string;
23
37
  request_fields: Record<string, unknown>;
24
- created_at: Date;
25
- updated_at: Date;
26
38
  }
@@ -9,40 +9,68 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SlaApprovalsView = void 0;
12
+ exports.SlaApprovalsView = exports.SLA_APPROVALS_REQUEST_OBJ_EXCLUDED_KEYS = void 0;
13
13
  const typeorm_1 = require("typeorm");
14
+ const SlaMyRequestsViewModel_1 = require("./SlaMyRequestsViewModel");
15
+ /** Reuse the same `request_obj` key exclusions as my-requests. */
16
+ exports.SLA_APPROVALS_REQUEST_OBJ_EXCLUDED_KEYS = SlaMyRequestsViewModel_1.SLA_MY_REQUESTS_REQUEST_OBJ_EXCLUDED_KEYS;
17
+ const REQUEST_FIELDS_SQL = `
18
+ (
19
+ COALESCE(sr.request_obj, '{}'::jsonb)
20
+ - 'id'
21
+ - 'status'
22
+ - 'role_id'
23
+ - 'user_id'
24
+ - 'createdBy'
25
+ - 'created_at'
26
+ - 'updated_by'
27
+ - 'updated_at'
28
+ - 'req_user_department_id'
29
+ - 'workflow_execution_id'
30
+ - 'department_id'
31
+ - 'req_user_section_id'
32
+ - 'service_type_id'
33
+ - 'service_type'
34
+ - 'created_by'
35
+ - 'service_id'
36
+ - 'sub_service_id'
37
+ - 'attachments'
38
+ - 'is_deleted'
39
+ - 'sla_request'
40
+ - 'sla_request_id'
41
+ ) AS request_fields`;
14
42
  const VW_SLA_APPROVALS_SQL = `
15
43
  SELECT
16
44
  sa.id AS sla_approval_id,
17
45
  sa.source_approval_id,
18
46
  sa.request_id,
19
- sa.service_id,
20
- sa.sub_service_id,
47
+ sa.service_id AS service_id,
48
+ sa.sub_service_id AS sub_service_id,
21
49
  TRIM(COALESCE(svc.name, ''))::TEXT AS service_name,
22
50
  TRIM(COALESCE(subsvc.sub_service_name, ''))::TEXT AS sub_service_name,
23
- sa.approval_status,
51
+ sa.department_id AS department_id,
52
+ TRIM(COALESCE(adpt.department_name, ''))::TEXT AS department_name,
53
+ sa.section_id AS section_id,
54
+ TRIM(COALESCE(asec.section_name, ''))::TEXT AS section_name,
55
+ sa.approver_role_id AS role_id,
56
+ TRIM(COALESCE(ar.name, ''))::TEXT AS role_name,
57
+ sa.approval_status::TEXT AS approval_status,
24
58
  sr.status::TEXT AS request_status,
25
- sa.level,
26
- sa.approver_user_id,
59
+ sa.level AS level,
60
+ sa.approver_user_id AS approver_user_id,
27
61
  TRIM(COALESCE(au.employee_name, ''))::TEXT AS approver_user_name,
28
- sa.delegate_user_id,
62
+ sa.delegate_user_id AS delegate_user_id,
29
63
  TRIM(COALESCE(du.employee_name, ''))::TEXT AS delegate_user_name,
30
- sa.approved_by,
64
+ sa.approved_by AS approved_by,
31
65
  TRIM(COALESCE(ab.employee_name, ''))::TEXT AS approved_by_name,
32
- sa.comment,
66
+ sa.comment::TEXT AS comment,
67
+ sa.created_at AS created_at,
68
+ sa.updated_at AS updated_at,
33
69
  sr.user_id AS requester_user_id,
34
70
  TRIM(COALESCE(ru.employee_name, ''))::TEXT AS requester_name,
35
- TRIM(COALESCE(dept.department_name, ''))::TEXT AS department_name,
36
- TRIM(COALESCE(sec.section_name, ''))::TEXT AS section_name,
37
- (
38
- COALESCE(sr.request_obj, '{}'::jsonb)
39
- - 'id' - 'status' - 'role_id' - 'user_id' - 'createdBy' - 'created_at'
40
- - 'updated_by' - 'updated_at' - 'req_user_department_id' - 'workflow_execution_id'
41
- - 'department_id' - 'req_user_section_id' - 'service_type_id' - 'service_type'
42
- - 'created_by' - 'service_id' - 'sub_service_id' - 'attachments'
43
- ) AS request_fields,
44
- sa.created_at,
45
- sa.updated_at
71
+ TRIM(COALESCE(rdept.department_name, ''))::TEXT AS req_user_department_name,
72
+ TRIM(COALESCE(rsec.section_name, ''))::TEXT AS req_user_section_name,
73
+ ${REQUEST_FIELDS_SQL}
46
74
  FROM sla_approval sa
47
75
  INNER JOIN sla_requests sr
48
76
  ON sr.request_id = sa.request_id AND COALESCE(sr.is_deleted, false) = false
@@ -50,19 +78,30 @@ LEFT JOIN caa_services svc
50
78
  ON svc.id = sa.service_id AND COALESCE(svc.is_deleted, false) = false
51
79
  LEFT JOIN caa_sub_services subsvc
52
80
  ON subsvc.id = sa.sub_service_id AND COALESCE(subsvc.is_deleted, false) = false
53
- LEFT JOIN users au ON au.id = sa.approver_user_id
54
- LEFT JOIN users du ON du.id = sa.delegate_user_id
55
- LEFT JOIN users ab ON ab.id = sa.approved_by
81
+ LEFT JOIN departments adpt
82
+ ON adpt.id = sa.department_id AND COALESCE(adpt.is_deleted, false) = false
83
+ LEFT JOIN sections asec
84
+ ON asec.id = sa.section_id AND COALESCE(asec.is_deleted, false) = false
85
+ LEFT JOIN role ar
86
+ ON ar.id = sa.approver_role_id AND COALESCE(ar.is_deleted, false) = false
87
+ LEFT JOIN users au
88
+ ON au.id = sa.approver_user_id AND COALESCE(au.is_deleted, false) = false
89
+ LEFT JOIN users du
90
+ ON du.id = sa.delegate_user_id AND COALESCE(du.is_deleted, false) = false
91
+ LEFT JOIN users ab
92
+ ON ab.id = sa.approved_by AND COALESCE(ab.is_deleted, false) = false
56
93
  LEFT JOIN users ru
57
94
  ON ru.id = sr.user_id AND COALESCE(ru.is_deleted, false) = false
58
- LEFT JOIN departments dept
59
- ON dept.id = sr.req_user_department_id AND COALESCE(dept.is_deleted, false) = false
60
- LEFT JOIN sections sec
61
- ON sec.id = sr.req_user_section_id AND COALESCE(sec.is_deleted, false) = false
95
+ LEFT JOIN departments rdept
96
+ ON rdept.id = sr.req_user_department_id AND COALESCE(rdept.is_deleted, false) = false
97
+ LEFT JOIN sections rsec
98
+ ON rsec.id = sr.req_user_section_id AND COALESCE(rsec.is_deleted, false) = false
62
99
  WHERE COALESCE(sa.is_deleted, false) = false
63
- AND (sa.service_id = sr.service_id OR sa.service_id IS NULL)
64
- AND (sa.sub_service_id = sr.sub_service_id OR sa.sub_service_id IS NULL)
65
100
  `;
101
+ /**
102
+ * Read-only view for SLA approvals listings (TypeORM).
103
+ * Approver matching (`sla_approval_matches_user` semantics) is applied in Reports_Service queries.
104
+ */
66
105
  let SlaApprovalsView = class SlaApprovalsView {
67
106
  };
68
107
  exports.SlaApprovalsView = SlaApprovalsView;
@@ -80,11 +119,11 @@ __decorate([
80
119
  ], SlaApprovalsView.prototype, "request_id", void 0);
81
120
  __decorate([
82
121
  (0, typeorm_1.ViewColumn)(),
83
- __metadata("design:type", Object)
122
+ __metadata("design:type", Number)
84
123
  ], SlaApprovalsView.prototype, "service_id", void 0);
85
124
  __decorate([
86
125
  (0, typeorm_1.ViewColumn)(),
87
- __metadata("design:type", Object)
126
+ __metadata("design:type", Number)
88
127
  ], SlaApprovalsView.prototype, "sub_service_id", void 0);
89
128
  __decorate([
90
129
  (0, typeorm_1.ViewColumn)(),
@@ -94,6 +133,30 @@ __decorate([
94
133
  (0, typeorm_1.ViewColumn)(),
95
134
  __metadata("design:type", String)
96
135
  ], SlaApprovalsView.prototype, "sub_service_name", void 0);
136
+ __decorate([
137
+ (0, typeorm_1.ViewColumn)(),
138
+ __metadata("design:type", Number)
139
+ ], SlaApprovalsView.prototype, "department_id", void 0);
140
+ __decorate([
141
+ (0, typeorm_1.ViewColumn)(),
142
+ __metadata("design:type", String)
143
+ ], SlaApprovalsView.prototype, "department_name", void 0);
144
+ __decorate([
145
+ (0, typeorm_1.ViewColumn)(),
146
+ __metadata("design:type", Number)
147
+ ], SlaApprovalsView.prototype, "section_id", void 0);
148
+ __decorate([
149
+ (0, typeorm_1.ViewColumn)(),
150
+ __metadata("design:type", String)
151
+ ], SlaApprovalsView.prototype, "section_name", void 0);
152
+ __decorate([
153
+ (0, typeorm_1.ViewColumn)(),
154
+ __metadata("design:type", Number)
155
+ ], SlaApprovalsView.prototype, "role_id", void 0);
156
+ __decorate([
157
+ (0, typeorm_1.ViewColumn)(),
158
+ __metadata("design:type", String)
159
+ ], SlaApprovalsView.prototype, "role_name", void 0);
97
160
  __decorate([
98
161
  (0, typeorm_1.ViewColumn)(),
99
162
  __metadata("design:type", String)
@@ -108,7 +171,7 @@ __decorate([
108
171
  ], SlaApprovalsView.prototype, "level", void 0);
109
172
  __decorate([
110
173
  (0, typeorm_1.ViewColumn)(),
111
- __metadata("design:type", Object)
174
+ __metadata("design:type", Number)
112
175
  ], SlaApprovalsView.prototype, "approver_user_id", void 0);
113
176
  __decorate([
114
177
  (0, typeorm_1.ViewColumn)(),
@@ -116,7 +179,7 @@ __decorate([
116
179
  ], SlaApprovalsView.prototype, "approver_user_name", void 0);
117
180
  __decorate([
118
181
  (0, typeorm_1.ViewColumn)(),
119
- __metadata("design:type", Object)
182
+ __metadata("design:type", Number)
120
183
  ], SlaApprovalsView.prototype, "delegate_user_id", void 0);
121
184
  __decorate([
122
185
  (0, typeorm_1.ViewColumn)(),
@@ -124,7 +187,7 @@ __decorate([
124
187
  ], SlaApprovalsView.prototype, "delegate_user_name", void 0);
125
188
  __decorate([
126
189
  (0, typeorm_1.ViewColumn)(),
127
- __metadata("design:type", Object)
190
+ __metadata("design:type", Number)
128
191
  ], SlaApprovalsView.prototype, "approved_by", void 0);
129
192
  __decorate([
130
193
  (0, typeorm_1.ViewColumn)(),
@@ -132,8 +195,16 @@ __decorate([
132
195
  ], SlaApprovalsView.prototype, "approved_by_name", void 0);
133
196
  __decorate([
134
197
  (0, typeorm_1.ViewColumn)(),
135
- __metadata("design:type", Object)
198
+ __metadata("design:type", String)
136
199
  ], SlaApprovalsView.prototype, "comment", void 0);
200
+ __decorate([
201
+ (0, typeorm_1.ViewColumn)(),
202
+ __metadata("design:type", Date)
203
+ ], SlaApprovalsView.prototype, "created_at", void 0);
204
+ __decorate([
205
+ (0, typeorm_1.ViewColumn)(),
206
+ __metadata("design:type", Date)
207
+ ], SlaApprovalsView.prototype, "updated_at", void 0);
137
208
  __decorate([
138
209
  (0, typeorm_1.ViewColumn)(),
139
210
  __metadata("design:type", Number)
@@ -145,23 +216,15 @@ __decorate([
145
216
  __decorate([
146
217
  (0, typeorm_1.ViewColumn)(),
147
218
  __metadata("design:type", String)
148
- ], SlaApprovalsView.prototype, "department_name", void 0);
219
+ ], SlaApprovalsView.prototype, "req_user_department_name", void 0);
149
220
  __decorate([
150
221
  (0, typeorm_1.ViewColumn)(),
151
222
  __metadata("design:type", String)
152
- ], SlaApprovalsView.prototype, "section_name", void 0);
223
+ ], SlaApprovalsView.prototype, "req_user_section_name", void 0);
153
224
  __decorate([
154
225
  (0, typeorm_1.ViewColumn)(),
155
226
  __metadata("design:type", Object)
156
227
  ], SlaApprovalsView.prototype, "request_fields", void 0);
157
- __decorate([
158
- (0, typeorm_1.ViewColumn)(),
159
- __metadata("design:type", Date)
160
- ], SlaApprovalsView.prototype, "created_at", void 0);
161
- __decorate([
162
- (0, typeorm_1.ViewColumn)(),
163
- __metadata("design:type", Date)
164
- ], SlaApprovalsView.prototype, "updated_at", void 0);
165
228
  exports.SlaApprovalsView = SlaApprovalsView = __decorate([
166
229
  (0, typeorm_1.ViewEntity)({
167
230
  name: "vw_sla_approvals",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-modules/civil-aviation-authority",
3
- "version": "2.3.259",
3
+ "version": "2.3.260",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -0,0 +1,88 @@
1
+ -- SLA approvals read model: joined display names + filtered request_obj payload.
2
+ -- Approver-scope filtering is applied in Reports_Service (TypeORM), not in this view.
3
+ -- Run once against the EmpPortal PostgreSQL database:
4
+ -- psql -U <user> -d <database> -f sql/vw_sla_approvals.sql
5
+
6
+ DROP VIEW IF EXISTS vw_sla_approvals CASCADE;
7
+
8
+ CREATE VIEW vw_sla_approvals AS
9
+ SELECT
10
+ sa.id AS sla_approval_id,
11
+ sa.source_approval_id,
12
+ sa.request_id,
13
+ sa.service_id AS service_id,
14
+ sa.sub_service_id AS sub_service_id,
15
+ TRIM(COALESCE(svc.name, ''))::TEXT AS service_name,
16
+ TRIM(COALESCE(subsvc.sub_service_name, ''))::TEXT AS sub_service_name,
17
+ sa.department_id AS department_id,
18
+ TRIM(COALESCE(adpt.department_name, ''))::TEXT AS department_name,
19
+ sa.section_id AS section_id,
20
+ TRIM(COALESCE(asec.section_name, ''))::TEXT AS section_name,
21
+ sa.approver_role_id AS role_id,
22
+ TRIM(COALESCE(ar.name, ''))::TEXT AS role_name,
23
+ sa.approval_status::TEXT AS approval_status,
24
+ sr.status::TEXT AS request_status,
25
+ sa.level AS level,
26
+ sa.approver_user_id AS approver_user_id,
27
+ TRIM(COALESCE(au.employee_name, ''))::TEXT AS approver_user_name,
28
+ sa.delegate_user_id AS delegate_user_id,
29
+ TRIM(COALESCE(du.employee_name, ''))::TEXT AS delegate_user_name,
30
+ sa.approved_by AS approved_by,
31
+ TRIM(COALESCE(ab.employee_name, ''))::TEXT AS approved_by_name,
32
+ sa.comment::TEXT AS comment,
33
+ sa.created_at AS created_at,
34
+ sa.updated_at AS updated_at,
35
+ sr.user_id AS requester_user_id,
36
+ TRIM(COALESCE(ru.employee_name, ''))::TEXT AS requester_name,
37
+ TRIM(COALESCE(rdept.department_name, ''))::TEXT AS req_user_department_name,
38
+ TRIM(COALESCE(rsec.section_name, ''))::TEXT AS req_user_section_name,
39
+ (
40
+ COALESCE(sr.request_obj, '{}'::jsonb)
41
+ - 'id'
42
+ - 'status'
43
+ - 'role_id'
44
+ - 'user_id'
45
+ - 'createdBy'
46
+ - 'created_at'
47
+ - 'updated_by'
48
+ - 'updated_at'
49
+ - 'req_user_department_id'
50
+ - 'workflow_execution_id'
51
+ - 'department_id'
52
+ - 'req_user_section_id'
53
+ - 'service_type_id'
54
+ - 'service_type'
55
+ - 'created_by'
56
+ - 'service_id'
57
+ - 'sub_service_id'
58
+ - 'attachments'
59
+ - 'is_deleted'
60
+ - 'sla_request'
61
+ - 'sla_request_id'
62
+ ) AS request_fields
63
+ FROM sla_approval sa
64
+ INNER JOIN sla_requests sr
65
+ ON sr.request_id = sa.request_id AND COALESCE(sr.is_deleted, false) = false
66
+ LEFT JOIN caa_services svc
67
+ ON svc.id = sa.service_id AND COALESCE(svc.is_deleted, false) = false
68
+ LEFT JOIN caa_sub_services subsvc
69
+ ON subsvc.id = sa.sub_service_id AND COALESCE(subsvc.is_deleted, false) = false
70
+ LEFT JOIN departments adpt
71
+ ON adpt.id = sa.department_id AND COALESCE(adpt.is_deleted, false) = false
72
+ LEFT JOIN sections asec
73
+ ON asec.id = sa.section_id AND COALESCE(asec.is_deleted, false) = false
74
+ LEFT JOIN role ar
75
+ ON ar.id = sa.approver_role_id AND COALESCE(ar.is_deleted, false) = false
76
+ LEFT JOIN users au
77
+ ON au.id = sa.approver_user_id AND COALESCE(au.is_deleted, false) = false
78
+ LEFT JOIN users du
79
+ ON du.id = sa.delegate_user_id AND COALESCE(du.is_deleted, false) = false
80
+ LEFT JOIN users ab
81
+ ON ab.id = sa.approved_by AND COALESCE(ab.is_deleted, false) = false
82
+ LEFT JOIN users ru
83
+ ON ru.id = sr.user_id AND COALESCE(ru.is_deleted, false) = false
84
+ LEFT JOIN departments rdept
85
+ ON rdept.id = sr.req_user_department_id AND COALESCE(rdept.is_deleted, false) = false
86
+ LEFT JOIN sections rsec
87
+ ON rsec.id = sr.req_user_section_id AND COALESCE(rsec.is_deleted, false) = false
88
+ WHERE COALESCE(sa.is_deleted, false) = false;
@@ -250,6 +250,7 @@ import { MediaPublicationsChat } from './models/MediaPublicationsChatModel';
250
250
  import { MediaPublicationsWorkFlow } from './models/MediaPublicationsWorkflowModel';
251
251
  import { SlaRequest } from './models/SlaRequestModel';
252
252
  import { SlaMyRequestsView } from './models/SlaMyRequestsViewModel';
253
+ import { SlaApprovalsView } from './models/SlaApprovalsViewModel';
253
254
  import { ServiceSlaApproval } from './models/ServiceSlaApprovalModel';
254
255
  import { SlaConfig } from './models/SlaConfigModel';
255
256
 
@@ -509,6 +510,7 @@ export const AppDataSource = new DataSource({
509
510
  MediaPublicationsWorkFlow,
510
511
  SlaRequest,
511
512
  SlaMyRequestsView,
513
+ SlaApprovalsView,
512
514
  ServiceSlaApproval,
513
515
  SlaConfig,
514
516
  ],
package/src/index.ts CHANGED
@@ -490,6 +490,7 @@ export * from './models/RequestTenderAnalysisRequestModel';
490
490
  export * from './models/ContractServiceRequestModel';export * from './models/SlaConfigModel';
491
491
  export * from './models/SlaRequestModel';
492
492
  export * from './models/SlaMyRequestsViewModel';
493
+ export * from './models/SlaApprovalsViewModel';
493
494
  export * from './models/ServiceSlaApprovalModel';
494
495
  export * from './sla/sla-table-sync.service';
495
496
  export * from './sla/sla-approval-mirror';
@@ -0,0 +1,191 @@
1
+ import { ViewColumn, ViewEntity } from "typeorm";
2
+ import { SLA_MY_REQUESTS_REQUEST_OBJ_EXCLUDED_KEYS } from "./SlaMyRequestsViewModel";
3
+
4
+ /** Reuse the same `request_obj` key exclusions as my-requests. */
5
+ export const SLA_APPROVALS_REQUEST_OBJ_EXCLUDED_KEYS = SLA_MY_REQUESTS_REQUEST_OBJ_EXCLUDED_KEYS;
6
+
7
+ const REQUEST_FIELDS_SQL = `
8
+ (
9
+ COALESCE(sr.request_obj, '{}'::jsonb)
10
+ - 'id'
11
+ - 'status'
12
+ - 'role_id'
13
+ - 'user_id'
14
+ - 'createdBy'
15
+ - 'created_at'
16
+ - 'updated_by'
17
+ - 'updated_at'
18
+ - 'req_user_department_id'
19
+ - 'workflow_execution_id'
20
+ - 'department_id'
21
+ - 'req_user_section_id'
22
+ - 'service_type_id'
23
+ - 'service_type'
24
+ - 'created_by'
25
+ - 'service_id'
26
+ - 'sub_service_id'
27
+ - 'attachments'
28
+ - 'is_deleted'
29
+ - 'sla_request'
30
+ - 'sla_request_id'
31
+ ) AS request_fields`;
32
+
33
+ const VW_SLA_APPROVALS_SQL = `
34
+ SELECT
35
+ sa.id AS sla_approval_id,
36
+ sa.source_approval_id,
37
+ sa.request_id,
38
+ sa.service_id AS service_id,
39
+ sa.sub_service_id AS sub_service_id,
40
+ TRIM(COALESCE(svc.name, ''))::TEXT AS service_name,
41
+ TRIM(COALESCE(subsvc.sub_service_name, ''))::TEXT AS sub_service_name,
42
+ sa.department_id AS department_id,
43
+ TRIM(COALESCE(adpt.department_name, ''))::TEXT AS department_name,
44
+ sa.section_id AS section_id,
45
+ TRIM(COALESCE(asec.section_name, ''))::TEXT AS section_name,
46
+ sa.approver_role_id AS role_id,
47
+ TRIM(COALESCE(ar.name, ''))::TEXT AS role_name,
48
+ sa.approval_status::TEXT AS approval_status,
49
+ sr.status::TEXT AS request_status,
50
+ sa.level AS level,
51
+ sa.approver_user_id AS approver_user_id,
52
+ TRIM(COALESCE(au.employee_name, ''))::TEXT AS approver_user_name,
53
+ sa.delegate_user_id AS delegate_user_id,
54
+ TRIM(COALESCE(du.employee_name, ''))::TEXT AS delegate_user_name,
55
+ sa.approved_by AS approved_by,
56
+ TRIM(COALESCE(ab.employee_name, ''))::TEXT AS approved_by_name,
57
+ sa.comment::TEXT AS comment,
58
+ sa.created_at AS created_at,
59
+ sa.updated_at AS updated_at,
60
+ sr.user_id AS requester_user_id,
61
+ TRIM(COALESCE(ru.employee_name, ''))::TEXT AS requester_name,
62
+ TRIM(COALESCE(rdept.department_name, ''))::TEXT AS req_user_department_name,
63
+ TRIM(COALESCE(rsec.section_name, ''))::TEXT AS req_user_section_name,
64
+ ${REQUEST_FIELDS_SQL}
65
+ FROM sla_approval sa
66
+ INNER JOIN sla_requests sr
67
+ ON sr.request_id = sa.request_id AND COALESCE(sr.is_deleted, false) = false
68
+ LEFT JOIN caa_services svc
69
+ ON svc.id = sa.service_id AND COALESCE(svc.is_deleted, false) = false
70
+ LEFT JOIN caa_sub_services subsvc
71
+ ON subsvc.id = sa.sub_service_id AND COALESCE(subsvc.is_deleted, false) = false
72
+ LEFT JOIN departments adpt
73
+ ON adpt.id = sa.department_id AND COALESCE(adpt.is_deleted, false) = false
74
+ LEFT JOIN sections asec
75
+ ON asec.id = sa.section_id AND COALESCE(asec.is_deleted, false) = false
76
+ LEFT JOIN role ar
77
+ ON ar.id = sa.approver_role_id AND COALESCE(ar.is_deleted, false) = false
78
+ LEFT JOIN users au
79
+ ON au.id = sa.approver_user_id AND COALESCE(au.is_deleted, false) = false
80
+ LEFT JOIN users du
81
+ ON du.id = sa.delegate_user_id AND COALESCE(du.is_deleted, false) = false
82
+ LEFT JOIN users ab
83
+ ON ab.id = sa.approved_by AND COALESCE(ab.is_deleted, false) = false
84
+ LEFT JOIN users ru
85
+ ON ru.id = sr.user_id AND COALESCE(ru.is_deleted, false) = false
86
+ LEFT JOIN departments rdept
87
+ ON rdept.id = sr.req_user_department_id AND COALESCE(rdept.is_deleted, false) = false
88
+ LEFT JOIN sections rsec
89
+ ON rsec.id = sr.req_user_section_id AND COALESCE(rsec.is_deleted, false) = false
90
+ WHERE COALESCE(sa.is_deleted, false) = false
91
+ `;
92
+
93
+ /**
94
+ * Read-only view for SLA approvals listings (TypeORM).
95
+ * Approver matching (`sla_approval_matches_user` semantics) is applied in Reports_Service queries.
96
+ */
97
+ @ViewEntity({
98
+ name: "vw_sla_approvals",
99
+ expression: VW_SLA_APPROVALS_SQL,
100
+ })
101
+ export class SlaApprovalsView {
102
+ @ViewColumn()
103
+ sla_approval_id: number;
104
+
105
+ @ViewColumn()
106
+ source_approval_id: number;
107
+
108
+ @ViewColumn()
109
+ request_id: number;
110
+
111
+ @ViewColumn()
112
+ service_id: number;
113
+
114
+ @ViewColumn()
115
+ sub_service_id: number;
116
+
117
+ @ViewColumn()
118
+ service_name: string;
119
+
120
+ @ViewColumn()
121
+ sub_service_name: string;
122
+
123
+ @ViewColumn()
124
+ department_id: number;
125
+
126
+ @ViewColumn()
127
+ department_name: string;
128
+
129
+ @ViewColumn()
130
+ section_id: number;
131
+
132
+ @ViewColumn()
133
+ section_name: string;
134
+
135
+ @ViewColumn()
136
+ role_id: number;
137
+
138
+ @ViewColumn()
139
+ role_name: string;
140
+
141
+ @ViewColumn()
142
+ approval_status: string;
143
+
144
+ @ViewColumn()
145
+ request_status: string;
146
+
147
+ @ViewColumn()
148
+ level: number;
149
+
150
+ @ViewColumn()
151
+ approver_user_id: number;
152
+
153
+ @ViewColumn()
154
+ approver_user_name: string;
155
+
156
+ @ViewColumn()
157
+ delegate_user_id: number;
158
+
159
+ @ViewColumn()
160
+ delegate_user_name: string;
161
+
162
+ @ViewColumn()
163
+ approved_by: number;
164
+
165
+ @ViewColumn()
166
+ approved_by_name: string;
167
+
168
+ @ViewColumn()
169
+ comment: string;
170
+
171
+ @ViewColumn()
172
+ created_at: Date;
173
+
174
+ @ViewColumn()
175
+ updated_at: Date;
176
+
177
+ @ViewColumn()
178
+ requester_user_id: number;
179
+
180
+ @ViewColumn()
181
+ requester_name: string;
182
+
183
+ @ViewColumn()
184
+ req_user_department_name: string;
185
+
186
+ @ViewColumn()
187
+ req_user_section_name: string;
188
+
189
+ @ViewColumn()
190
+ request_fields: Record<string, unknown>;
191
+ }