Fully implemented the Manage Time functionality
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
function createTimeEntries({ fetchJson, dates, getResourceUser }) {
|
||||
function createTimeEntries({ fetchJson, dates, getResourceUser, saveHeaders }) {
|
||||
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 = [];
|
||||
@@ -15,6 +15,61 @@ function createTimeEntries({ fetchJson, dates, getResourceUser }) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
async function requestTimeEntries(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$/, "") + `?resourceId=${encodeURIComponent(resource.resource.resourcePartyId)}&sortBy=createdDate&sortOrder=ASC&weekId=${encodeURIComponent(message.weekId)}`;
|
||||
const items = await fetchJson(url, { method: "GET", credentials: "include", headers: { Authorization: "Session", Accept: "application/json" } }, "requestTimeEntries", debugRequests);
|
||||
if (!Array.isArray(items)) throw new Error("Invalid time entries response.");
|
||||
return { ok: true, items, debugRequests };
|
||||
} catch (error) { error.debugRequests = [...debugRequests, ...(error.debugRequests || [])]; throw error; }
|
||||
}
|
||||
async function requestTimeEntriesDelete(message) {
|
||||
const debugRequests = [];
|
||||
try {
|
||||
if (!/^[1-9]\d*$/.test(String(message.id))) throw new Error("Missing or invalid time entry ID.");
|
||||
const url = endpoint.replace(/\/weekDetails$/, "") + `/${message.id}`;
|
||||
const headers = await saveHeaders(url);
|
||||
const result = await fetchJson(url, { method: "DELETE", credentials: "include", headers },
|
||||
"requestTimeEntriesDelete", debugRequests, { allowEmpty: true });
|
||||
return { ok: true, result, debugRequests };
|
||||
} catch (error) { error.debugRequests = debugRequests; throw error; }
|
||||
}
|
||||
async function requestTimeEntriesSave(message) {
|
||||
const debugRequests = [];
|
||||
try {
|
||||
if (!["POST", "PUT"].includes(message.method)) throw new Error("Invalid time entry save method.");
|
||||
if (!Array.isArray(message.items) || !message.items.length) throw new Error("No time entries to save.");
|
||||
const hours = ["saturdayTaskHours", "sundayTaskHours", "mondayTaskHours", "tuesdayTaskHours", "wednesdayTaskHours", "thursdayTaskHours", "fridayTaskHours"];
|
||||
for (const item of message.items) {
|
||||
if (!item || !["SERVICE", "NON_SERVICE"].includes(item.tag) || !item.taskType
|
||||
|| (item.tag === "SERVICE" && (!/^SR\d+$/.test(item.srNumber) || !item.activityCode))
|
||||
|| !/^\d+$/.test(String(item.weekId)) || Number(item.weekId) <= 0
|
||||
|| hours.some(key => typeof item[key] !== "number" || !Number.isFinite(item[key]) || item[key] < 0 || item[key] > 24)
|
||||
|| !hours.some(key => item[key] > 0)
|
||||
|| (message.method === "PUT" && (!/^\d+$/.test(String(item.id)) || Number(item.id) <= 0))) throw new Error("Invalid or incomplete time entry.");
|
||||
}
|
||||
const resource = await getResourceUser(message);
|
||||
debugRequests.push(...resource.debugRequests);
|
||||
const items = message.items.map(item => ({
|
||||
...(message.method === "PUT" ? { id: item.id } : {}),
|
||||
srNumber: item.tag === "NON_SERVICE" ? "non-service-sr" : item.srNumber,
|
||||
activityCode: item.activityCode || "", taskType: item.taskType, deliveryType: item.deliveryType || "",
|
||||
...Object.fromEntries(hours.map(key => [key, item[key]])), notes: String(item.notes || ""),
|
||||
weekId: item.weekId, resourceId: String(resource.resource.resourcePartyId), tag: item.tag
|
||||
}));
|
||||
const url = endpoint.replace(/\/weekDetails$/, "");
|
||||
const headers = await saveHeaders(url);
|
||||
const result = await fetchJson(url, {
|
||||
method: message.method, credentials: "include",
|
||||
headers, body: JSON.stringify(items)
|
||||
}, "requestTimeEntriesSave", debugRequests, { allowEmpty: true });
|
||||
return { ok: true, result, debugRequests };
|
||||
} catch (error) { error.debugRequests = [...debugRequests, ...(error.debugRequests || [])]; throw error; }
|
||||
}
|
||||
async function requestActiveServiceRequests(message) {
|
||||
const debugRequests = [];
|
||||
try {
|
||||
@@ -59,5 +114,5 @@ function createTimeEntries({ fetchJson, dates, getResourceUser }) {
|
||||
return { ok: true, items: result.items, debugRequests };
|
||||
} catch (error) { error.debugRequests = debugRequests; throw error; }
|
||||
}
|
||||
return { requestWeekDetails, requestActiveServiceRequests, requestServiceRequestExpand, requestLookupTaskType };
|
||||
return { requestWeekDetails, requestTimeEntries, requestTimeEntriesSave, requestTimeEntriesDelete, requestActiveServiceRequests, requestServiceRequestExpand, requestLookupTaskType };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user