ofsc-utility 1.0.16 → 1.0.18

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.
Files changed (48) hide show
  1. package/dist/index.d.ts +8 -1
  2. package/dist/index.js +13 -2
  3. package/dist/metadata/activityTypeGroup.d.ts +4 -0
  4. package/dist/metadata/activityTypeGroup.js +45 -0
  5. package/dist/metadata/activityTypes.d.ts +3 -0
  6. package/dist/metadata/activityTypes.js +74 -0
  7. package/dist/metadata/applictaionsIntegration.d.ts +7 -0
  8. package/dist/metadata/applictaionsIntegration.js +81 -0
  9. package/dist/metadata/capacity.d.ts +4 -0
  10. package/dist/metadata/capacity.js +58 -0
  11. package/dist/metadata/capacityCategories.d.ts +4 -0
  12. package/dist/metadata/capacityCategories.js +48 -0
  13. package/dist/metadata/form.d.ts +4 -0
  14. package/dist/metadata/form.js +30 -0
  15. package/dist/metadata/index.d.ts +1 -0
  16. package/dist/metadata/index.js +78 -0
  17. package/dist/metadata/inventoryTypes.d.ts +4 -0
  18. package/dist/metadata/inventoryTypes.js +45 -0
  19. package/dist/metadata/languages.d.ts +4 -0
  20. package/dist/metadata/languages.js +33 -0
  21. package/dist/metadata/nonWorkingReasons.d.ts +4 -0
  22. package/dist/metadata/nonWorkingReasons.js +32 -0
  23. package/dist/metadata/properties.d.ts +4 -0
  24. package/dist/metadata/properties.js +45 -0
  25. package/dist/metadata/resourceTypes.d.ts +4 -0
  26. package/dist/metadata/resourceTypes.js +33 -0
  27. package/dist/metadata/shifts.d.ts +4 -0
  28. package/dist/metadata/shifts.js +35 -0
  29. package/dist/metadata/timeSlots.d.ts +4 -0
  30. package/dist/metadata/timeSlots.js +35 -0
  31. package/dist/metadata/workSkillConditions.d.ts +6 -0
  32. package/dist/metadata/workSkillConditions.js +87 -0
  33. package/dist/metadata/workSkills.d.ts +4 -0
  34. package/dist/metadata/workSkills.js +35 -0
  35. package/dist/metadata/workZoneKey.d.ts +4 -0
  36. package/dist/metadata/workZoneKey.js +44 -0
  37. package/dist/metadata/workZones.d.ts +4 -0
  38. package/dist/metadata/workZones.js +31 -0
  39. package/dist/resources/index.d.ts +5 -0
  40. package/dist/resources/index.js +27 -0
  41. package/dist/utilities/index.d.ts +4 -0
  42. package/dist/utilities/index.js +156 -0
  43. package/package.json +4 -2
  44. package/readme.md +5 -4
  45. package/dist/ofsc-utility.esm.js +0 -3411
  46. package/dist/ofsc-utility.esm.js.map +0 -1
  47. package/dist/ofsc-utility.min.js +0 -1
  48. package/dist/ofsc-utility.min.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNonWorkingReasonMetaData = getNonWorkingReasonMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getNonWorkingReasonMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/nonWorkingReasons?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => ({
26
+ Label: d.label,
27
+ Name: d.name,
28
+ "Status": d.active ? "Active" : "Inactive",
29
+ }));
30
+ sheets['Non Working Reasons'] = overview;
31
+ return sheets;
32
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getPropertiesMetaData(clientId: string, clientSecret: string, instanceUrl: string, allUsedPropes: any[], token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[], allUsedPropes: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPropertiesMetaData = getPropertiesMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getPropertiesMetaData(clientId, clientSecret, instanceUrl, allUsedPropes, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/properties?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata, allUsedPropes);
20
+ return sheet;
21
+ }
22
+ function transformData(data, allUsedPropes) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => {
26
+ const comments = [
27
+ ...new Set(allUsedPropes
28
+ .filter((p) => p.label === d.label)
29
+ .map((p) => p.comment)
30
+ .filter(Boolean) // remove null / undefined
31
+ )
32
+ ].join(', ');
33
+ return {
34
+ Label: d.label,
35
+ Name: d.name,
36
+ "Data Type": d.type,
37
+ "Entity": d.entity,
38
+ "GUI": d.gui,
39
+ "Clone Flag": d.cloneFlag,
40
+ "Comments": comments
41
+ };
42
+ });
43
+ sheets['Properties Overview'] = overview;
44
+ return sheets;
45
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getResourceTypesMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResourceTypesMetaData = getResourceTypesMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getResourceTypesMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/resourceTypes?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => ({
26
+ // "Label": d.label,
27
+ "Name": d.name,
28
+ "Status": d.active ? "Active" : "Inactive",
29
+ "Applictaion Role": d.role,
30
+ }));
31
+ sheets['Resource Types Overview'] = overview;
32
+ return sheets;
33
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getShiftMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getShiftMetaData = getShiftMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getShiftMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/shifts?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => ({
26
+ // "label": d.label,
27
+ "Shift Name": d.name,
28
+ "Status": d.active ? "Active" : "Inactive",
29
+ "Type": d.type,
30
+ "WorkTimeStart": d.workTimeStart,
31
+ "WorkTimeEnd": d.workTimeEnd,
32
+ }));
33
+ sheets['Shifts Overview'] = overview;
34
+ return sheets;
35
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getTimeSlotsMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTimeSlotsMetaData = getTimeSlotsMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getTimeSlotsMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/timeSlots?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => ({
26
+ // "label": d.label,
27
+ "Time Slot Name": d.name,
28
+ "Status": d.active ? "Active" : "Inactive",
29
+ "isAllDay": d.isAllDay ? "Yes" : "",
30
+ "Time Start": d.timeStart,
31
+ "Time End": d.timeEnd,
32
+ }));
33
+ sheets['Time Slots Overview'] = overview;
34
+ return sheets;
35
+ }
@@ -0,0 +1,6 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getWorkSkillsMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function getWorkSkillConditionsMetaData(clientId: string, clientSecret: string, instanceUrl: string, wsData: any[], token?: string): Promise<SheetData>;
4
+ export declare function transformData(data: any[], wsData: any[]): any;
5
+ export declare function transformDataWS(data: any[]): SheetData;
6
+ export {};
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkSkillsMetaData = getWorkSkillsMetaData;
4
+ exports.getWorkSkillConditionsMetaData = getWorkSkillConditionsMetaData;
5
+ exports.transformData = transformData;
6
+ exports.transformDataWS = transformDataWS;
7
+ const utilities_1 = require("../utilities");
8
+ async function getWorkSkillsMetaData(clientId, clientSecret, instanceUrl, token = "") {
9
+ let responsedata = [];
10
+ let offset = 0;
11
+ const limit = 100;
12
+ while (true) {
13
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/workSkills?offset=${offset}&limit=${limit}`;
14
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
15
+ token = res.token;
16
+ responsedata = [...responsedata, ...res.data.items];
17
+ if (!res.data.hasMore)
18
+ break;
19
+ offset = res.data.offset + limit;
20
+ }
21
+ const sheet = transformDataWS(responsedata);
22
+ const WSCSheet = await getWorkSkillConditionsMetaData(clientId, clientSecret, instanceUrl, responsedata, token);
23
+ return {
24
+ // ...sheet,
25
+ ...WSCSheet
26
+ };
27
+ }
28
+ async function getWorkSkillConditionsMetaData(clientId, clientSecret, instanceUrl, wsData, token = "") {
29
+ let responsedata = [];
30
+ let offset = 0;
31
+ const limit = 100;
32
+ while (true) {
33
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/workSkillConditions?offset=${offset}&limit=${limit}`;
34
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
35
+ token = res.token;
36
+ responsedata = [...responsedata, ...res.data.items];
37
+ if (!res.data.hasMore)
38
+ break;
39
+ offset = res.data.offset + limit;
40
+ }
41
+ const sheet = transformData(responsedata, wsData);
42
+ return sheet;
43
+ }
44
+ function transformData(data, wsData) {
45
+ const sheets = {};
46
+ // Sheet 2: Activity Type Groups Activities
47
+ const wsConditions = [];
48
+ data.forEach(d => {
49
+ if (!Array.isArray(d.conditions))
50
+ return;
51
+ d.conditions.forEach((ts) => {
52
+ wsConditions.push({
53
+ "Work Skill Name": d.label,
54
+ "Work Skill Status": wsData.find((ws) => ws.label === d.label).active ? "Active" : "Inactive",
55
+ "Property": ts.label,
56
+ "Function": ts.function,
57
+ "Value List": JSON.stringify(ts.valueList)
58
+ });
59
+ });
60
+ });
61
+ const props = wsConditions.reduce((acc, curr) => {
62
+ acc.push({
63
+ label: curr["Property"],
64
+ comment: "It is being used in Work Skill Condition"
65
+ });
66
+ return acc;
67
+ }, []);
68
+ return {
69
+ data: { 'Work Skills Conditions': wsConditions },
70
+ props
71
+ };
72
+ ;
73
+ }
74
+ function transformDataWS(data) {
75
+ const sheets = {};
76
+ const wsConditions = [];
77
+ data.forEach(d => {
78
+ wsConditions.push({
79
+ // "label": "ALM",
80
+ "WS Name": d.name,
81
+ "status": d.active ? "Active" : "Inactive",
82
+ "Sharing": d.sharing,
83
+ });
84
+ });
85
+ sheets['Work Skills Overview'] = wsConditions;
86
+ return sheets;
87
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getWorkSkillsMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkSkillsMetaData = getWorkSkillsMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getWorkSkillsMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/workSkills?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ const wsConditions = [];
25
+ data.forEach(d => {
26
+ wsConditions.push({
27
+ // "label": "ALM",
28
+ "WS Name": "ALM",
29
+ "status": d.active ? "Active" : "Inactive",
30
+ "Sharing": d.sharing,
31
+ });
32
+ });
33
+ sheets['Work Skills Overview'] = wsConditions;
34
+ return sheets;
35
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = any;
2
+ export declare function getWorkZoneKeyMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<any>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkZoneKeyMetaData = getWorkZoneKeyMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getWorkZoneKeyMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/workZoneKey?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.current];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: workZoneKey Overview
25
+ const overview = data.map(d => ({
26
+ "Label": d.label,
27
+ "Length": d.length,
28
+ "Function": d.function,
29
+ "Order": d.order,
30
+ "Api Parameter Name": d.apiParameterName
31
+ }));
32
+ const props = overview.reduce((acc, curr) => {
33
+ acc.push({
34
+ label: curr["Api Parameter Name"],
35
+ comment: "It is being used in work zone key"
36
+ });
37
+ return acc;
38
+ }, []);
39
+ return {
40
+ data: { 'Work Zone Key': overview },
41
+ props
42
+ };
43
+ ;
44
+ }
@@ -0,0 +1,4 @@
1
+ type SheetData = Record<string, any[]>;
2
+ export declare function getWorkZonesMetaData(clientId: string, clientSecret: string, instanceUrl: string, token?: string): Promise<SheetData>;
3
+ export declare function transformData(data: any[]): SheetData;
4
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkZonesMetaData = getWorkZonesMetaData;
4
+ exports.transformData = transformData;
5
+ const utilities_1 = require("../utilities");
6
+ async function getWorkZonesMetaData(clientId, clientSecret, instanceUrl, token = "") {
7
+ let responsedata = [];
8
+ let offset = 0;
9
+ const limit = 100;
10
+ while (true) {
11
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscMetadata/v1/workZones?offset=${offset}&limit=${limit}`;
12
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
13
+ token = res.token;
14
+ responsedata = [...responsedata, ...res.data.items];
15
+ if (!res.data.hasMore)
16
+ break;
17
+ offset = res.data.offset + limit;
18
+ }
19
+ const sheet = transformData(responsedata);
20
+ return sheet;
21
+ }
22
+ function transformData(data) {
23
+ const sheets = {};
24
+ // Sheet 1: Activity Type Groups Overview
25
+ const overview = data.map(d => ({
26
+ "Work Zone Name": d.workZoneName,
27
+ "status": d.status ? "Active" : "Inactive",
28
+ }));
29
+ sheets['Work Zone Overview'] = overview;
30
+ return sheets;
31
+ }
@@ -1 +1,6 @@
1
1
  export declare function downloadAllResourcesCSV(clientId: string, clientSecret: string, instanceUrl: string): Promise<void>;
2
+ export declare function AllResources(clientId: string, clientSecret: string, instanceUrl: string, initialToken?: string): Promise<any[]>;
3
+ export declare function getworkSkillsOfResource(clientId: string, clientSecret: string, instanceUrl: string, resourceId: number, token?: string): Promise<{
4
+ token: string;
5
+ data: any;
6
+ }>;
@@ -37,9 +37,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.downloadAllResourcesCSV = downloadAllResourcesCSV;
40
+ exports.AllResources = AllResources;
41
+ exports.getworkSkillsOfResource = getworkSkillsOfResource;
40
42
  const fs = __importStar(require("fs"));
41
43
  const node_fetch_1 = __importDefault(require("node-fetch"));
42
44
  const index_1 = require("../oauthTokenService/index");
45
+ const utilities_1 = require("../utilities");
43
46
  async function downloadAllResourcesCSV(clientId, clientSecret, instanceUrl) {
44
47
  let offset = 0;
45
48
  const limit = 100;
@@ -113,3 +116,27 @@ async function downloadAllResourcesCSV(clientId, clientSecret, instanceUrl) {
113
116
  console.log(`🧩 Date Time: ${new Date()}`);
114
117
  console.log("-------------------------------------");
115
118
  }
119
+ async function AllResources(clientId, clientSecret, instanceUrl, initialToken = "") {
120
+ const fetchResources = async (offset, token) => {
121
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscCore/v1/resources/?offset=${offset}&limit=100`;
122
+ const res = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
123
+ const { items, totalResults } = res.data;
124
+ const totalFetched = items.length;
125
+ console.log(`✔ Received ${totalFetched} items (Total: ${offset + totalFetched})`);
126
+ if (offset + totalFetched >= totalResults) {
127
+ return items;
128
+ }
129
+ const nextItems = await fetchResources(offset + totalFetched, res.token);
130
+ return [...items, ...nextItems];
131
+ };
132
+ return fetchResources(0, initialToken);
133
+ }
134
+ async function getworkSkillsOfResource(clientId, clientSecret, instanceUrl, resourceId, token = "") {
135
+ const url = `https://${instanceUrl}.fs.ocs.oraclecloud.com/rest/ofscCore/v1/resources/${encodeURIComponent(resourceId)}/workSkills`;
136
+ console.log(`➡️ Fetching workSkills by resourceID: ${url}`);
137
+ const response = await (0, utilities_1.fetchWithRetry)(url, clientId, clientSecret, instanceUrl, token);
138
+ return {
139
+ token: response.token,
140
+ data: response.data.items
141
+ };
142
+ }
@@ -15,3 +15,7 @@ export declare const fetchWithRetry: (url: string, clientId: string, clientSecre
15
15
  }>;
16
16
  export declare function saveCsv<T extends Record<string, any>>(rows: T[], filePath: string): void;
17
17
  export declare function xmlNodeToObjects(xmlString: string, parentNodeName: string): Record<string, string>[];
18
+ type SheetRow = Record<string, unknown>;
19
+ type SheetsData = Record<string, SheetRow[]>;
20
+ export declare function createExcelFile(sheetsData: SheetsData, filename?: string): void;
21
+ export {};
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -6,6 +39,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.fetchWithRetry = void 0;
7
40
  exports.saveCsv = saveCsv;
8
41
  exports.xmlNodeToObjects = xmlNodeToObjects;
42
+ exports.createExcelFile = createExcelFile;
43
+ const XLSX = __importStar(require("xlsx-js-style"));
9
44
  const xmldom_1 = require("xmldom");
10
45
  const oauthTokenService_1 = require("../oauthTokenService");
11
46
  /**
@@ -115,3 +150,124 @@ function xmlNodeToObjects(xmlString, parentNodeName) {
115
150
  return obj;
116
151
  });
117
152
  }
153
+ function createExcelFile(sheetsData, filename = 'file.xlsx') {
154
+ const workbook = XLSX.utils.book_new();
155
+ /* ============================
156
+ Create INDEX sheet first
157
+ ============================ */
158
+ const indexData = Object.keys(sheetsData).map(sheetName => ({
159
+ "OFSC Master Configuration Sheet": sheetName
160
+ }));
161
+ const indexSheet = XLSX.utils.json_to_sheet(indexData);
162
+ // Style INDEX header
163
+ const indexHeaderCell = indexSheet['A1'];
164
+ if (indexHeaderCell) {
165
+ indexHeaderCell.s = {
166
+ fill: { fgColor: { rgb: 'FFD9D9D9' } },
167
+ font: { bold: true, size: 18 },
168
+ alignment: { horizontal: 'center' }
169
+ };
170
+ }
171
+ // Add hyperlinks
172
+ indexData.forEach((_, i) => {
173
+ const row = i + 2; // data starts after header
174
+ const cellAddress = `A${row}`;
175
+ const cell = indexSheet[cellAddress];
176
+ if (cell) {
177
+ cell.l = {
178
+ Target: `#'${cell.v}'!A1`,
179
+ Tooltip: `Go to ${cell.v}`
180
+ };
181
+ cell.s = {
182
+ font: {
183
+ color: { rgb: 'FF0563C1' }, // Excel hyperlink blue
184
+ underline: true
185
+ }
186
+ };
187
+ }
188
+ });
189
+ indexSheet['!cols'] = [{ wch: 30 }];
190
+ XLSX.utils.book_append_sheet(workbook, indexSheet, 'INDEX');
191
+ /* ============================
192
+ Create data sheets
193
+ ============================ */
194
+ Object.entries(sheetsData).forEach(([sheetName, data]) => {
195
+ const worksheet = XLSX.utils.json_to_sheet(data);
196
+ if (data.length > 0) {
197
+ const keys = Object.keys(data[0]);
198
+ // Auto-size columns
199
+ worksheet['!cols'] = keys.map(key => {
200
+ const maxLength = Math.max(key.length, ...data.map(row => String(row[key] ?? '').length));
201
+ return { wch: Math.min(maxLength + 2, 50) };
202
+ });
203
+ // Highlight header row
204
+ keys.forEach((_, colIndex) => {
205
+ const addr = XLSX.utils.encode_cell({ r: 0, c: colIndex });
206
+ const cell = worksheet[addr];
207
+ if (!cell)
208
+ return;
209
+ cell.s = {
210
+ fill: { fgColor: { rgb: 'FFD9D9D9' } },
211
+ font: { bold: false, sz: 14, },
212
+ alignment: { horizontal: 'center' }
213
+ };
214
+ });
215
+ // Process data rows
216
+ data.forEach((row, rowIndex) => {
217
+ const rowIsInactive = row.Status === 'Inactive' ||
218
+ JSON.stringify(row).toUpperCase().includes('INACTIVE') || JSON.stringify(row).toUpperCase().includes('INACTIVATE');
219
+ keys.forEach((key, colIndex) => {
220
+ const addr = XLSX.utils.encode_cell({
221
+ r: rowIndex + 1,
222
+ c: colIndex
223
+ });
224
+ const cell = worksheet[addr];
225
+ if (!cell)
226
+ return;
227
+ const value = String(row[key] ?? '').toLowerCase();
228
+ cell.s = cell.s || {};
229
+ // "read write" highlight
230
+ if (value.includes('read write')) {
231
+ cell.s.font = {
232
+ ...(cell.s.font || {}),
233
+ bold: true,
234
+ color: { rgb: 'FFCC0000' }
235
+ };
236
+ }
237
+ if (value.includes('nonserialized')) {
238
+ cell.s.font = {
239
+ ...(cell.s.font || {}),
240
+ bold: true,
241
+ color: { rgb: 'FF006100' }
242
+ };
243
+ }
244
+ if (value.includes('it is being used')) {
245
+ cell.s.font = {
246
+ ...(cell.s.font || {}),
247
+ bold: true,
248
+ color: { rgb: 'FF006100' }
249
+ };
250
+ }
251
+ if (value.includes('on-call')) {
252
+ cell.s.font = {
253
+ ...(cell.s.font || {}),
254
+ bold: true,
255
+ color: { rgb: 'FF0563C1' }
256
+ };
257
+ }
258
+ // Inactive row highlight
259
+ if (rowIsInactive) {
260
+ cell.s.fill = { fgColor: { rgb: 'FFFFCCCC' } };
261
+ cell.s.font = {
262
+ ...(cell.s.font || {}),
263
+ color: { rgb: 'FFCC0000' }
264
+ };
265
+ }
266
+ });
267
+ });
268
+ }
269
+ XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);
270
+ });
271
+ XLSX.writeFile(workbook, filename);
272
+ console.log(`✓ Excel file created: ${filename}`);
273
+ }