Partially implemented the Manage Time functionality

This commit is contained in:
2026-10-16 19:50:39 -03:00
parent 2ae057cc90
commit d392e5ddd7
28 changed files with 2528 additions and 64 deletions

View File

@@ -0,0 +1,63 @@
function createTimeEntries({ fetchJson, dates, getResourceUser }) {
const endpoint = "https://comcipapic-oalprod.integration.ocp.oraclecloud.com/ic/builder/rt/oalset_timeentrymobile/live;profile=PROD/services/auth/1.1/proxy/oke_seaas/uri/https/gxpap.oracle.com/oalcrm/service/set/seaas/mgmt/timeEntries/weekDetails";
async function requestWeekDetails(message) {
const debugRequests = [];
try {
const date = dates.toApi(message.dateReference);
const items = await fetchJson(`${endpoint}?dateValue=${encodeURIComponent(date)}`, {
method: "GET", credentials: "include", headers: { Authorization: "Session", Accept: "application/json" }
}, "requestWeekDetails", debugRequests);
if (!Array.isArray(items) || items.length !== 7 || items.some(item => !dates.fromApi(item?.Date) || !dates.fromApi(item?.EndDate))
|| new Set(items.map(item => item.Date)).size !== 7) throw new Error("Invalid week details response.");
return { ok: true, items, debugRequests };
} catch (error) {
error.debugRequests = debugRequests;
throw error;
}
}
async function requestActiveServiceRequests(message) {
const debugRequests = [];
try {
if (!/^\d+$/.test(String(message.weekId)) || Number(message.weekId) <= 0) throw new Error("Missing or invalid WeekId.");
const resource = await getResourceUser(message);
debugRequests.push(...resource.debugRequests);
const url = endpoint.replace(/weekDetails$/, "activeServiceRequests") + `?resourceId=${encodeURIComponent(resource.resource.resourcePartyId)}&weekId=${encodeURIComponent(message.weekId)}`;
const items = await fetchJson(url, { method: "GET", credentials: "include", headers: { Authorization: "Session", Accept: "application/json" } }, "requestActiveServiceRequests", debugRequests);
if (!Array.isArray(items)) throw new Error("Invalid active Service Requests response.");
return { ok: true, items, debugRequests };
} catch (error) { error.debugRequests = [...debugRequests, ...(error.debugRequests || [])]; throw error; }
}
async function requestServiceRequestExpand(message) {
const debugRequests = [];
try {
if (!Array.isArray(message.srNumbers)) throw new Error("Missing Service Request numbers.");
const numbers = [...new Set(message.srNumbers.map(value => String(value || "").trim()).filter(Boolean))].filter(value => value !== "non-service-sr");
if (numbers.some(value => !/^SR\d+$/.test(value))) throw new Error("Invalid Service Request number.");
const batches = [];
for (let index = 0; index < numbers.length; index += 50) batches.push(numbers.slice(index, index + 50));
if (!batches.length || batches[batches.length - 1].length === 50) batches.push([]);
batches[batches.length - 1].push("non-service-sr");
const base = "https://comcipapic-oalprod.integration.ocp.oraclecloud.com/ic/builder/rt/oalset_timeentrymobile/live;profile=PROD/services/auth/1.1/proxy/crmRestApiSearchResourcesLatestCustomActions/uri/https/eeho.fa.us2.oraclecloud.com/crmRestApi/resources/latest/serviceRequests";
const fields = "SrNumber,SRActivities_c,ProblemDescription,AccountPartyUniqueName,ServiceNew_c,OptyOwner_c,OptyName_c,OptyNumber_c,ReportedByPartyUniqueName,StatusCdMeaning,CountryText_c,AssigneePersonName,OptyStatus_c";
const items = [];
for (const batch of batches) {
const query = `SrNumber in (${batch.map(value => `'${value}'`).join(",")})`;
const url = `${base}?expand=ServiceRequest_SRToInternalSR_Tgt&fields=${encodeURIComponent(fields)}&limit=200&onlyData=true&q=${encodeURIComponent(query).replace(/'/g, "%27")}`;
const result = await fetchJson(url, { method: "GET", credentials: "include", headers: { Authorization: "Session", Accept: "application/json", "vb-proxy-header-rest-framework-version": "3" } }, "requestServiceRequestExpand", debugRequests);
if (!Array.isArray(result?.items)) throw new Error("Invalid Service Request expansion response.");
items.push(...result.items);
}
return { ok: true, items, debugRequests };
} catch (error) { error.debugRequests = debugRequests; throw error; }
}
async function requestLookupTaskType() {
const debugRequests = [];
try {
const url = endpoint.replace(/mgmt\/timeEntries\/weekDetails$/, "crm/lookups?lookupType=SCTA_TASK_TYPE&type=CUSTOM");
const result = await fetchJson(url, { method: "GET", credentials: "include", headers: { Authorization: "Session", Accept: "application/json" } }, "requestLookupTaskType", debugRequests);
if (!Array.isArray(result?.items)) throw new Error("Invalid Task Type lookup response.");
return { ok: true, items: result.items, debugRequests };
} catch (error) { error.debugRequests = debugRequests; throw error; }
}
return { requestWeekDetails, requestActiveServiceRequests, requestServiceRequestExpand, requestLookupTaskType };
}