diff --git a/apps/OpenSign/src/routes/Report.js b/apps/OpenSign/src/routes/Report.js index efec224ac..44ecb74ff 100644 --- a/apps/OpenSign/src/routes/Report.js +++ b/apps/OpenSign/src/routes/Report.js @@ -47,30 +47,24 @@ const Report = () => { if (json) { setActions(json.actions); setReportName(json.reportName); - const { className, params, keys, orderBy } = json; Parse.serverURL = localStorage.getItem("BaseUrl12"); Parse.initialize(localStorage.getItem("AppID12")); const currentUser = Parse.User.current().id; - const serverURL = - localStorage.getItem("BaseUrl12") + "classes/" + className; - const strParams = JSON.stringify(params); - const strKeys = keys.join(); const headers = { "Content-Type": "application/json", "X-Parse-Application-Id": localStorage.getItem("AppID12"), - "X-Parse-Session-Token": localStorage.getItem("accesstoken") + sessiontoken: localStorage.getItem("accesstoken") }; try { - const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skipUserRecord}&limit=${limit}&include=AuditTrail.UserPtr`; - const res = await axios.get(url, { + const params = { reportId: id, skip: skipUserRecord, limit: limit }; + const url = `${localStorage.getItem("BaseUrl12")}/functions/getReport`; + const res = await axios.post(url, params, { headers: headers, signal: abortController.signal // is used to cancel fetch query }); if (id === "4Hhwbp482K") { - const listData = res.data?.results.filter( - (x) => x.Signers.length > 0 - ); + const listData = res.data?.result.filter((x) => x.Signers.length > 0); let arr = []; for (const obj of listData) { const isSigner = obj.Signers.some( @@ -101,7 +95,7 @@ const Report = () => { prevRecord.length > 0 ? [...prevRecord, ...arr] : arr ); } else { - if (res.data.results.length === 10) { + if (res.data.result.length === 10) { setIsMoreDocs(true); console.log("here"); } else { @@ -110,8 +104,8 @@ const Report = () => { setIsNextRecord(false); setList((prevRecord) => prevRecord.length > 0 - ? [...prevRecord, ...res.data.results] - : res.data.results + ? [...prevRecord, ...res.data.result] + : res.data.result ); } setIsLoader(false); diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js index 2ecc0fbf1..e42ee38e5 100644 --- a/apps/OpenSignServer/cloud/main.js +++ b/apps/OpenSignServer/cloud/main.js @@ -16,7 +16,7 @@ import getUserId from './parsefunction/getUserId.js'; import getUserDetails from './parsefunction/getUserDetails.js'; import getDocument from './parsefunction/getDocument.js'; import getDrive from './parsefunction/getDrive.js'; -// import getInProgressReport from './parsefunction/getInProgressReport.js'; +import getReport from './parsefunction/getReport.js'; Parse.Cloud.define('AddUserToRole', addUserToGroups); Parse.Cloud.define('UserGroups', getUserGroups); @@ -36,3 +36,4 @@ Parse.Cloud.define('getUserId', getUserId); Parse.Cloud.define('getUserDetails', getUserDetails); Parse.Cloud.define('getDocument', getDocument); Parse.Cloud.define('getDrive', getDrive) +Parse.Cloud.define('getReport', getReport) \ No newline at end of file diff --git a/apps/OpenSignServer/cloud/parsefunction/getDrive.js b/apps/OpenSignServer/cloud/parsefunction/getDrive.js index 567d1b08f..5c0d31a8e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDrive.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDrive.js @@ -27,7 +27,7 @@ export default async function getDrive(request) { 'X-Parse-Master-key': process.env.MASTER_KEY, }, }); - console.log('res.data.results ', res.data.results); + // console.log('res.data.results ', res.data.results); if (res.data && res.data.results) { return res.data.results; } else { diff --git a/apps/OpenSignServer/cloud/parsefunction/getReport.js b/apps/OpenSignServer/cloud/parsefunction/getReport.js new file mode 100644 index 000000000..1f2c6f1f1 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/getReport.js @@ -0,0 +1,51 @@ +import reportJson from './reportsJson.js'; +import axios from 'axios' + +export default async function getReport(request) { + const reportId = request.params.reportId; + const limit = request.params.limit; + const skip = request.params.skip; + + const serverUrl = process.env.SERVER_URL; + const appId = process.env.APP_ID; + + try { + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': appId, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + const userId = userRes.data && userRes.data.objectId; + if (userId) { + const json = reportId && reportJson(reportId, userId); + if (json) { + const { params, keys } = json; + const orderBy = '-updatedAt'; + const strParams = JSON.stringify(params); + const strKeys = keys.join(); + const headers = { + 'Content-Type': 'application/json', + 'X-Parse-Application-Id': appId, + 'X-Parse-Master-Key': process.env.MASTER_KEY, + }; + const url = `${serverUrl}/classes/contracts_Document?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`; + const res = await axios.get(url, { headers: headers }); + if (res.data && res.data.results) { + return res.data.results; + } else { + return []; + } + } else { + return { error: 'Report is not available!' }; + } + } + } catch (err) { + console.log('err', err); + if (err.code == 209) { + return { error: 'Invalid session token' }; + } else { + return { error: "You don't have access!" }; + } + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js index 6e0bb6658..ba3f1ab97 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js @@ -105,7 +105,7 @@ async function PDF(s, r) { headers: { 'Content-Type': 'application/json', 'X-Parse-Application-Id': APPID, - 'X-Parse-Session-Token': s.headers.sessiontoken, + 'X-Parse-Master-Key': masterKEY, }, }), d = await axios.get(serverUrl + '/users/me', { diff --git a/apps/OpenSignServer/cloud/parsefunction/reportsJson.js b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js new file mode 100644 index 000000000..83c295d74 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js @@ -0,0 +1,204 @@ +export default function reportJson(id, userId) { + const currentUserId = userId; + + switch (id) { + // draft documents report + case 'ByHuevtCFY': + return { + reportName: 'Draft Documents', + params: { + Type: null, + $or: [ + { Signers: null, SignedUrl: null }, + { Signers: { $exists: true }, Placeholders: null }, + ], + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + }, + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + // Need your sign report + case '4Hhwbp482K': + return { + reportName: 'Need your sign', + params: { + Type: { $ne: 'Folder' }, + IsCompleted: { $ne: true }, + IsDeclined: { $ne: true }, + ExpiryDate: { + $gt: { __type: 'Date', iso: new Date().toISOString() }, + }, + Placeholders: { $ne: null }, + }, + keys: [ + 'Name', + 'Note', + 'Folder.Name', + 'URL', + 'ExtUserPtr.Name', + 'Signers.Name', + 'Signers.UserId', + 'AuditTrail', + ], + }; + // In progess report + case '1MwEuxLEkF': + return { + reportName: 'In-progress documents', + params: { + Type: { $ne: 'Folder' }, + Signers: { $ne: null }, + Placeholders: { $ne: null }, + IsCompleted: { $ne: true }, + IsDeclined: { $ne: true }, + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + ExpiryDate: { + $gt: { __type: 'Date', iso: new Date().toISOString() }, + }, + }, + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + // completed documents report + case 'kQUoW4hUXz': + return { + reportName: 'Completed Documents', + params: { + Type: null, + IsCompleted: true, + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + IsDeclined: { $ne: true }, + }, + keys: [ + 'Name', + 'Note', + 'Folder.Name', + 'URL', + 'ExtUserPtr.Name', + 'Signers.Name', + 'TimeToCompleteDays', + ], + }; + + // declined documents report + case 'UPr2Fm5WY3': + return { + reportName: 'Declined Documents', + params: { + Type: null, + IsDeclined: true, + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + }, + + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + // Expired Documents report + case 'zNqBHXHsYH': + return { + reportName: 'Expired Documents', + params: { + IsCompleted: { $ne: true }, + IsDeclined: { $ne: true }, + Type: { $ne: 'Folder' }, + $and: [ + { + $or: [ + { Signers: { $ne: null }, SignedUrl: { $ne: null } }, + { Placeholders: { $ne: null } }, + ], + }, + { + ExpiryDate: { + $lt: { __type: 'Date', iso: new Date().toISOString() }, + }, + }, + ], + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + }, + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + // Recently sent for signatures report show on dashboard + case 'd9k3UfYHBc': + return { + reportName: 'Recently sent for signatures', + params: { + Type: { $ne: 'Folder' }, + Signers: { $ne: null }, + Placeholders: { $ne: null }, + IsCompleted: { $ne: true }, + IsDeclined: { $ne: true }, + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + ExpiryDate: { + $gt: { __type: 'Date', iso: new Date().toISOString() }, + }, + }, + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + // Recent signature requests report show on dashboard + case '5Go51Q7T8r': + return { + reportName: 'Recent signature requests', + params: { + Type: { $ne: 'Folder' }, + IsCompleted: { $ne: true }, + IsDeclined: { $ne: true }, + ExpiryDate: { + $gt: { __type: 'Date', iso: new Date().toISOString() }, + }, + Placeholders: { $ne: null }, + }, + keys: [ + 'Name', + 'Note', + 'Folder.Name', + 'URL', + 'ExtUserPtr.Name', + 'Signers.Name', + 'Signers.UserId', + 'AuditTrail', + ], + }; + // Drafts report show on dashboard + case 'kC5mfynCi4': + return { + reportName: 'Drafts', + params: { + Type: null, + $or: [ + { Signers: null, SignedUrl: null }, + { Signers: { $exists: true }, Placeholders: null }, + ], + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: currentUserId, + }, + }, + keys: ['Name', 'Note', 'Folder.Name', 'URL', 'ExtUserPtr.Name', 'Signers.Name'], + }; + default: + return null; + } +}