@platform-modules/civil-aviation-authority 2.3.297 → 2.3.298

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.
@@ -183,6 +183,18 @@
183
183
  "it_helpdesk_wf_l3_not_required_closed": {
184
184
  "en": "L3 assignment not required, request closed by {{userName}}{{comment}}",
185
185
  "ar": "تعيين المستوى الثالث (L3) غير مطلوب، تم إغلاق الطلب بواسطة {{userName}}{{comment}}"
186
+ },
187
+ "request_assigned": {
188
+ "en": "Request Assigned",
189
+ "ar": "تم تعيين الطلب"
190
+ },
191
+ "request_pending_from": {
192
+ "en": "Request Pending from {{name}}",
193
+ "ar": "الطلب قيد الانتظار من {{name}}"
194
+ },
195
+ "request_pending": {
196
+ "en": "Request Pending",
197
+ "ar": "الطلب قيد الانتظار"
186
198
  }
187
199
  },
188
200
  "chatTemplates": {
@@ -326,6 +326,19 @@ function buildRequestApprovedAssignedWorkflowFields(params) {
326
326
  }
327
327
  /** Standard workflow log UPDATE fields for all CAA module repositories. */
328
328
  function buildWorkflowLogUpdateFields(params) {
329
+ if (params.approvalStatus === 'Closed') {
330
+ const closed = buildClosedWorkflowMessage({
331
+ roleName: params.roleName,
332
+ roleArabicName: params.roleArabicName,
333
+ comment: params.comment,
334
+ });
335
+ return {
336
+ content: closed.en,
337
+ content_ar: closed.ar,
338
+ status: params.workflowStatus,
339
+ status_ar: resolveWorkflowStatusAr(params.workflowStatus),
340
+ };
341
+ }
329
342
  const isApprovedLike = params.approvalStatus === 'Approved' || params.approvalStatus === 'Assigned';
330
343
  if (isApprovedLike) {
331
344
  const assignment = tryParseRequestAssignedComment(params.comment);
@@ -1206,6 +1219,25 @@ function resolveWorkflowContentAr(content, actors) {
1206
1219
  const nameAr = resolveArabicWorkflowActorName(actors, namePartEn);
1207
1220
  return interpolate(WORKFLOW_TEMPLATES.request_approval_pending_from.ar, { name: nameAr });
1208
1221
  }
1222
+ // Assign Tasks to Employee workflow (legacy EN strings)
1223
+ if (normalized === 'Request Assigned') {
1224
+ return WORKFLOW_TEMPLATES.request_assigned?.ar ?? null;
1225
+ }
1226
+ if (normalized === 'Request Pending') {
1227
+ return WORKFLOW_TEMPLATES.request_pending?.ar ?? null;
1228
+ }
1229
+ const assignTasksPendingPrefix = WORKFLOW_TEMPLATES.request_pending_from?.en.split('{{name}}')[0].trim();
1230
+ if (assignTasksPendingPrefix && normalized.startsWith(assignTasksPendingPrefix)) {
1231
+ const namePartEn = normalized.slice(assignTasksPendingPrefix.length).trim();
1232
+ const nameAr = resolveArabicWorkflowActorName(actors, namePartEn);
1233
+ return interpolate(WORKFLOW_TEMPLATES.request_pending_from.ar, { name: nameAr });
1234
+ }
1235
+ if (normalized.toLowerCase() === 'notification sent pending') {
1236
+ return WORKFLOW_TEMPLATES.notification_sent_pending?.ar ?? null;
1237
+ }
1238
+ if (normalized.toLowerCase() === 'notification sent successfully') {
1239
+ return WORKFLOW_TEMPLATES.notification_sent_successfully?.ar ?? null;
1240
+ }
1209
1241
  if (normalized === 'Approval Pending from HR Section' ||
1210
1242
  normalized === 'Approval Pending from Records Department') {
1211
1243
  return WORKFLOW_TEMPLATES.request_approval_pending?.ar ?? null;
@@ -1257,6 +1289,28 @@ function enrichWorkflowLog(log) {
1257
1289
  content_ar = resolvedAr;
1258
1290
  }
1259
1291
  }
1292
+ const inProgressPrefix = WORKFLOW_TEMPLATES.request_approval_in_progress_from?.en.split('{{name}}')[0].trim();
1293
+ if (content &&
1294
+ inProgressPrefix &&
1295
+ content.startsWith(inProgressPrefix) &&
1296
+ existingAr &&
1297
+ resolvedAr &&
1298
+ existingAr !== resolvedAr) {
1299
+ const namePartEn = content.slice(inProgressPrefix.length).trim();
1300
+ if (namePartEn && existingAr.includes(namePartEn)) {
1301
+ content_ar = resolvedAr;
1302
+ }
1303
+ }
1304
+ if (content &&
1305
+ existingAr &&
1306
+ resolvedAr &&
1307
+ existingAr !== resolvedAr &&
1308
+ /[A-Za-z]/.test(existingAr) &&
1309
+ (actors?.deptArabicName?.trim() ||
1310
+ actors?.sectionArabicName?.trim() ||
1311
+ actors?.roleArabicName?.trim())) {
1312
+ content_ar = resolvedAr;
1313
+ }
1260
1314
  if (content &&
1261
1315
  existingAr &&
1262
1316
  resolvedAr &&
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-modules/civil-aviation-authority",
3
- "version": "2.3.297",
3
+ "version": "2.3.298",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -183,6 +183,18 @@
183
183
  "it_helpdesk_wf_l3_not_required_closed": {
184
184
  "en": "L3 assignment not required, request closed by {{userName}}{{comment}}",
185
185
  "ar": "تعيين المستوى الثالث (L3) غير مطلوب، تم إغلاق الطلب بواسطة {{userName}}{{comment}}"
186
+ },
187
+ "request_assigned": {
188
+ "en": "Request Assigned",
189
+ "ar": "تم تعيين الطلب"
190
+ },
191
+ "request_pending_from": {
192
+ "en": "Request Pending from {{name}}",
193
+ "ar": "الطلب قيد الانتظار من {{name}}"
194
+ },
195
+ "request_pending": {
196
+ "en": "Request Pending",
197
+ "ar": "الطلب قيد الانتظار"
186
198
  }
187
199
  },
188
200
  "chatTemplates": {
@@ -476,6 +476,20 @@ export function buildWorkflowLogUpdateFields(params: {
476
476
  roleArabicName?: string | null;
477
477
  comment?: string | null;
478
478
  }): { content: string; content_ar: string; status: string; status_ar: string | null } {
479
+ if (params.approvalStatus === 'Closed') {
480
+ const closed = buildClosedWorkflowMessage({
481
+ roleName: params.roleName,
482
+ roleArabicName: params.roleArabicName,
483
+ comment: params.comment,
484
+ });
485
+ return {
486
+ content: closed.en,
487
+ content_ar: closed.ar,
488
+ status: params.workflowStatus,
489
+ status_ar: resolveWorkflowStatusAr(params.workflowStatus),
490
+ };
491
+ }
492
+
479
493
  const isApprovedLike =
480
494
  params.approvalStatus === 'Approved' || params.approvalStatus === 'Assigned';
481
495
 
@@ -1808,6 +1822,27 @@ export function resolveWorkflowContentAr(
1808
1822
  const nameAr = resolveArabicWorkflowActorName(actors, namePartEn);
1809
1823
  return interpolate(WORKFLOW_TEMPLATES.request_approval_pending_from.ar, { name: nameAr });
1810
1824
  }
1825
+
1826
+ // Assign Tasks to Employee workflow (legacy EN strings)
1827
+ if (normalized === 'Request Assigned') {
1828
+ return WORKFLOW_TEMPLATES.request_assigned?.ar ?? null;
1829
+ }
1830
+ if (normalized === 'Request Pending') {
1831
+ return WORKFLOW_TEMPLATES.request_pending?.ar ?? null;
1832
+ }
1833
+ const assignTasksPendingPrefix = WORKFLOW_TEMPLATES.request_pending_from?.en.split('{{name}}')[0].trim();
1834
+ if (assignTasksPendingPrefix && normalized.startsWith(assignTasksPendingPrefix)) {
1835
+ const namePartEn = normalized.slice(assignTasksPendingPrefix.length).trim();
1836
+ const nameAr = resolveArabicWorkflowActorName(actors, namePartEn);
1837
+ return interpolate(WORKFLOW_TEMPLATES.request_pending_from.ar, { name: nameAr });
1838
+ }
1839
+ if (normalized.toLowerCase() === 'notification sent pending') {
1840
+ return WORKFLOW_TEMPLATES.notification_sent_pending?.ar ?? null;
1841
+ }
1842
+ if (normalized.toLowerCase() === 'notification sent successfully') {
1843
+ return WORKFLOW_TEMPLATES.notification_sent_successfully?.ar ?? null;
1844
+ }
1845
+
1811
1846
  if (
1812
1847
  normalized === 'Approval Pending from HR Section' ||
1813
1848
  normalized === 'Approval Pending from Records Department'
@@ -1873,6 +1908,32 @@ export function enrichWorkflowLog(log: Record<string, unknown>): Record<string,
1873
1908
  content_ar = resolvedAr;
1874
1909
  }
1875
1910
  }
1911
+ const inProgressPrefix = WORKFLOW_TEMPLATES.request_approval_in_progress_from?.en.split('{{name}}')[0].trim();
1912
+ if (
1913
+ content &&
1914
+ inProgressPrefix &&
1915
+ content.startsWith(inProgressPrefix) &&
1916
+ existingAr &&
1917
+ resolvedAr &&
1918
+ existingAr !== resolvedAr
1919
+ ) {
1920
+ const namePartEn = content.slice(inProgressPrefix.length).trim();
1921
+ if (namePartEn && existingAr.includes(namePartEn)) {
1922
+ content_ar = resolvedAr;
1923
+ }
1924
+ }
1925
+ if (
1926
+ content &&
1927
+ existingAr &&
1928
+ resolvedAr &&
1929
+ existingAr !== resolvedAr &&
1930
+ /[A-Za-z]/.test(existingAr) &&
1931
+ (actors?.deptArabicName?.trim() ||
1932
+ actors?.sectionArabicName?.trim() ||
1933
+ actors?.roleArabicName?.trim())
1934
+ ) {
1935
+ content_ar = resolvedAr;
1936
+ }
1876
1937
  if (
1877
1938
  content &&
1878
1939
  existingAr &&